nginx的配置中不支持if條件的邏輯與/邏輯或運算 ,并且不支持if的嵌套語法,我們可以用變量的方式來實現:
首先是偽代碼(即不被nginx支持),寫在這里只是為了方便理解:
代碼如下:
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {
return 403;
}
下面這是等效的,并真實可用的配置
代碼如下:
set $flag 0;
if ($remote_addr ~ "^(12.34|56.78)") {
set $flag "${flag}1";
}
if ($http_user_agent ~* "spider") {
set $flag "${flag}2";
}
if ($flag = "012") {
return 403;
}
新聞熱點
疑難解答