前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx if指令支持多条件的逻辑判断吗?

Nginx if指令支持多条件的逻辑判断吗?

作者头像
用户1560186
发布2019-11-19 21:34:42
4.1K0
发布2019-11-19 21:34:42
举报
文章被收录于专栏:运维录运维录

不知不觉 nginx主题的文章写了60+篇,有最早的也有最近的,有些是记录安装配置,有些是记录问题解决方法,内容质量有深也有浅参差不齐,随着技术迭代有些文章已经过时了(例如Docker时代)不再符合当前的技术需求,而有些文章虽然久远但是仍有有意义(例如Nginx HA),所以有了梳理这些文章的想法,目标有两个吧,一是回顾下过去的文章巩固下知识点,二是去其糟粕留下精华将有价值的文章搬迁(搬砖)的微信公众号。


今天的这篇文章发布于2016年01月,是介绍如何在 nginx中如何借用set指令实现 if逻辑运算功能(如 True and True),这里借助set指令实现而不是直接在if表达式中加入 &&或者||运算符,是因为nginx的if指令不支持条件的"逻辑与"和"逻辑或"运算符,并且nginx不支持if嵌套形式条件判断。所以需要"曲线救国"来完成目标任务,此外文章除set指令外还涉return指令与if指令配合使用。


下面的示例要完成的目标有两个

1. 使用nginx $http_user_agent, $uri 变量 结合if 语句,完成多重条件判断。 2. 对应用场景,示例恶意post行为返回405状态码。 配置文件

cat /etc/nginx/conf.d/default.conf server { #... 其它配置项省略 # 设置变量为空字符串 set $black ''; # 条件1 if ($http_user_agent ~* "(compatible; MSIE 9.0; Windows NT 6.1)") { set $black "${black}1"; } # 条件2 if ($uri ~* "/tools/sendSms" ) { set $black "${black}1"; } # 条件3 "逻辑与"为变量叠加的形式,既条件为真设置值为1. if ($request_method = POST) { set $black "${black}1"; } # 条件3 "逻辑或",如任意一个条件为假设置值为0. if ($request_method != POST) { set $black "${black}0"; } # 叠加后的变量值,"逻辑与"111,"逻辑或"110. if ($black = "111") { return 405; } }


验证下结果

# 使用POST方法,服务器返回 405 状态。

curl -LI -X "POST" -A "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)" "http://localhost/tools/sendSms?type=mobilephone&mobilephone=1597XXXXX06" HTTP/1.1 405 Not Allowed Server: nginx 省略....

# 其它方法(GET/HEAD),服务器返回 200状态。

curl -LI -A "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)" "http://localhost/tools/sendSms?type=mobilephone&mobilephone=1597XXXXX06" HTTP/1.1 200 OK Server: nginx 省略....


指令使用方法 1. return 指令

语法:return code 默认值:none 使用字段:server, location, if 这个指令结束执行配置语句并为客户端返回状态代码,可以使用下列的值: 204,400,402-406,408,410, 411, 413, 416与500-504。 此外,非标准代码444将关闭连接并且不发送任何的头部。

2. set 指令

语法:set variable value 默认值:none 使用字段:server, location, if 指令设置一个变量并为其赋值,其值可以是文本,变量和它们的组合。 你可以使用set定义一个新的变量,但是不能使用set设置$http_xxx头部变量的值

3. if 指令

请参考这篇文章 <<Nginx Rewrite 重写URI>>


代码语言:javascript
复制
本期搬砖就到这里下期再搬
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档