参考这里
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」索引&事务