注册
|
登录
发帖
热搜
活动
交友
discuz
论坛
BBS
翼度工具
翼度网址导航
开发工具
Linux命令速查
网页设计配色表
在线制作icon
颜色代码选取器
翼度科技
»
论坛
›
云主机
›
服务器技术
›
查看内容
返回列表
发新帖
nginx if 指令的具体使用
周松弛
周松弛
当前离线
积分
12
4
主题
4
帖子
12
积分
新手上路
新手上路, 积分 12, 距离下一级还需 38 积分
新手上路, 积分 12, 距离下一级还需 38 积分
积分
12
发消息
显示全部楼层
nginx if 指令
参考
这里
Syntax: if (condition) { ... }
Default: —
Context: server, location
复制代码
if指令的格式如下:
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
Nginx的多重if判断
到此这篇关于nginx if 指令的具体使用的文章就介绍到这了,更多相关nginx if 指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:
https://www.jb51.net/server/3209251r7.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
上一篇:
Nginx Proxy Manager的具体实现
下一篇:
nginx ingress的具体使用
发表于 2024-5-26 06:01:53
举报
回复
使用道具
分享
返回列表
发新帖
本版积分规则
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
快速回复
快速回复
返回顶部
返回顶部
返回列表
返回列表