柚子快報激活碼778899分享:運維 nginx if 指令
柚子快報激活碼778899分享:運維 nginx if 指令
目錄
nginx if 指令直接判斷變量判斷是否等于字符串判斷變量是否匹配正則表達(dá)式文件及目錄判斷示例1:判斷index.html是否存在示例2:判斷URL中是否存在某個參數(shù)Parameter示例3:判斷URI中是否為某個特定路徑示例4:開放白名單內(nèi)的功能,其余功能禁止訪問示例5:if-else示例6:多重if判斷參考
nginx if 指令
參考這里
Syntax: if (condition) { ... }
Default: —
Context: server, location
直接判斷變量
如果變量值是空字符串或者"0"時,判定為false;否則,判定為true。1.0.1版本前,任何以"0"開頭的字符串,判定為false。
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
判斷是否等于字符串
使用 “=” 和 “!=” 操作符判斷是否等于字符串
if ($request_method = POST) {
return 405;
}
判斷變量是否匹配正則表達(dá)式
使用 “~” 和 “!~” 操作符判斷變量是否匹配正則表達(dá)式。
~:判斷時區(qū)分字符大小寫~*:判斷時不區(qū)分字符大小寫!~:判斷時區(qū)分字符大小寫!~*:判斷時不區(qū)分字符大小寫
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
文件及目錄判斷
“-f”, “!-f”:判斷指定的路徑是否為存在且為文件;“-d”, “!-d”:判斷指定的路徑是否為存在且為目錄;“-e”, “!-e”:判斷指定的路徑是否存在,文件或目錄均可;“-x”, “!-x”:判斷指定路徑的文件是否存在且可執(zhí)行;
示例1:判斷index.html是否存在
location =/index.html {
if (!-f "$document_root/index.html") {
rewrite ^(.*)$ /index2.html;
}
}
示例2:判斷URL中是否存在某個參數(shù)Parameter
if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") {
...
}
示例3:判斷URI中是否為某個特定路徑
if ($request_uri ~* "^/app/stat/"){
...
}
示例4:開放白名單內(nèi)的功能,其余功能禁止訪問
# 白名單開關(guān)。false,打開;true,關(guān)閉。
set $isInWhiteList 'false';
# 白名單1:統(tǒng)計
if ($request_uri ~* "^/app/stat/"){
set $isInWhiteList 'true';
}
# 白名單2:ajax接口
if ($request_uri ~* "^/app/ajax/"){
set $isInWhiteList 'true';
}
# 采用白名單方式放行功能
location /app {
if ($isInWhiteList != 'true') {
rewrite ^/ /deny;
}
proxy_pass http://127.0.0.1:8080;
}
# 禁止訪問
location =/deny {
deny all;
}
示例5:if-else
# 條件:if
if ($request_uri ~* "abc"){
set $flag '${flag}1';
}
# 條件:else
if ($request_uri !~* "abc"){
set $flag '${flag}2';
}
示例6:多重if判斷
server {
...
set $flag "";
# 條件1:if
if ($request_uri ~* "abc"){
set $flag '${flag}1';
}
# 條件1:else
if ($request_uri !~* "abc"){
set $flag '${flag}2';
}
# 條件2:if
if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") {
set $flag '${flag}1';
}
# 條件2:else
if ($query_string !~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") {
set $flag '${flag}2';
}
# 多重if完了,根據(jù)結(jié)果做相應(yīng)處理
if ($flag = '11') {
...
}
if ($flag = '12') {
...
}
if ($flag = '21') {
...
}
if ($flag = '22') {
...
}
location / {
...
}
}
參考
https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if Nginx的多重if判斷
柚子快報激活碼778899分享:運維 nginx if 指令
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。