免费资源网 – https://freexyz.cn/
目录nginx if 指令直接判断变量判断是否等于字符串判断变量是否匹配正则表达式文件及目录判断示例1:判断index.html是否存在示例2:判断URL中是否存在某个参数Parameter示例3:判断URI中是否为某个特定路径示例4:开放白名单内的功能,其余功能禁止访问示例5:if-else示例6:多重if判断参考
nginx if 指令
参考这里
Syntax: if (condition) { … } Default: — Context: server, locationif指令的格式如下:
if(condition) { … }
condition可以是如下类型:
变量名,如果变量的值是空字符串或者0表示false变量使用“=”和“!=”来跟字符串比较可以是正则表达式检查文件是否存在使用“-f” 和 “!-f”检查目录是否存在使用 “-d” 和 “!-d”检查文件、目录、符号链接是否存在使用 “-e” 和 “!-e”检查是否是可执行文件使用“-x” 和 “!-x”if指令不支持多条件、不支持嵌套、不支持else,与常见的条件表达式不同的特点是,if指令使用单个等号=而不是双等号==表达等值比较。
直接判断变量
如果变量值是空字符串或者”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/$1 break; } if ($http_cookie ~* “id=([^;]+)(?:;|$)”) { set $id $1; }文件及目录判断
“-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
© 版权声明
THE END
暂无评论内容