Nginx實(shí)現(xiàn)if多重判斷配置方法示例
nginx的配置中不支持if條件的邏輯與/邏輯或運(yùn)算 ,并且不支持if的嵌套語法,我們可以用變量的方式來實(shí)現(xiàn):
首先是偽代碼(即不被nginx支持),寫在這里只是為了方便理解:
if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {
return 403;
}
從這句話我們可以知道,如果滿足條件一并同時(shí)也滿足條件二,就返回一個(gè)值403。
下面這是等效的,并真實(shí)可用的配置
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;
}
這里就相當(dāng)于是定義一個(gè)值(值一),如果滿足條件一這個(gè)值一就變成另一個(gè)值(值二),如果在滿足條件二那么這個(gè)值二就變成另一個(gè)值(值三),最后如果值三等滿足我們定義的一個(gè)值那么就返回我們的403.
這樣就達(dá)到同樣的效果了。