参考这里
Syntax: if (condition) { ... } Default: — Context: server, location
if ($slow) { limit_rate 10k; } if ($invalid_referer) { return 403; }
使用 “=” 和 “!=” 操作符判断是否等于字符串
if ($request_method = POST) { return 405; }
使用 “~” 和 “!~” 操作符判断变量是否匹配正则表达式。
if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/ break; } if ($http_cookie ~* "id=([^;]+)(?:;|$)") { set $id ; }
location =/index.html { if (!-f "$document_root/index.html") { rewrite ^(.*)$ /index2.html; } }
if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { ... }
if ($request_uri ~* "^/app/stat/"){ ... }
# 白名单开关。false,打开;true,关闭。 set $isInWhiteList 'false'; # 白名单1:统计 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; }
# 条件:if if ($request_uri ~* "abc"){ set $flag '${flag}1'; } # 条件:else if ($request_uri !~* "abc"){ set $flag '${flag}2'; }
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完了,根据结果做相应处理 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判断
上一篇:「MySQL」索引&事务