nginx if 指令
目录
- nginx if 指令
- 直接判断变量
- 判断是否等于字符串
- 判断变量是否匹配正则表达式
- 文件及目录判断
- 示例1:判断index.html是否存在
- 示例2:判断URL中是否存在某个参数Parameter
- 示例3:判断URI中是否为某个特定路径
- 示例4:开放白名单内的功能,其余功能禁止访问
- 示例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; }
判断变量是否匹配正则表达式
使用 “~” 和 “!~” 操作符判断变量是否匹配正则表达式。
- ~:判断时区分字符大小写
- ~*:判断时不区分字符大小写
- !~:判断时区分字符大小写
- !~*:判断时不区分字符大小写
if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/ break; } if ($http_cookie ~* "id=([^;]+)(?:;|$)") { set $id ; }
文件及目录判断
- “-f”, “!-f”:判断指定的路径是否为存在且为文件;
- “-d”, “!-d”:判断指定的路径是否为存在且为目录;
- “-e”, “!-e”:判断指定的路径是否存在,文件或目录均可;
- “-x”, “!-x”:判断指定路径的文件是否存在且可执行;
示例1:判断index.html是否存在
location =/index.html { if (!-f "$document_root/index.html") { rewrite ^(.*)$ /index2.html; } }
示例2:判断URL中是否存在某个参数Parameter
if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { ... }
示例3:判断URI中是否为某个特定路径
if ($request_uri ~* "^/app/stat/"){ ... }
示例4:开放白名单内的功能,其余功能禁止访问
# 白名单开关。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; }
示例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完了,根据结果做相应处理 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判断
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!