Nginx条件中的或、与
在公司的编程马拉松中前端项目部署在NG的镜像中,其中有个需求是通过浏览器访问时,若请求是前端资源则返回前端页面,如果请求的是后端接口则返回后端响应。如:浏览器访问  http://abc.com/apis/name 时,有可能是前端页面路径,也有可能为后端接口路径。通过NG的条件判断可以实现此需求。

正则匹配
| 符号 | 描述 | 
|---|---|
| = | 字符串比较相等 | 
| != | 字符串比较不相等 | 
| ~ | 符合指定正则表达式时返回true(匹配时区分大小写) | 
| ~* | 符合指定正则表达式时返回true(匹配时不区分大小写) | 
| !~ | 不符合指定正则表达式时返回true(匹配时区分大小写) | 
| !~* | 不符合指定正则表达式时返回true(匹配时不区分大小写) | 
NG中的表达式和大多数语言一样
1  | if (<condition1>) {  | 
- 不支持多条件表达式
 - 不支持嵌套
 - 不支持else
 
在NG的条件表达式中没有表达式没有直接”或“、“与”的语法,需要存储变量的状态来实现“或”、“与”的效果。
或
场景一
1  | # 设置flag的初始值  | 
上述条件表达式类似Java中的
1  | if (<condition1> || <condition2>) {  | 
场景二
在判断变量值时,可以直接用|判断
1  | # 请求方式为GET、POST、PUT、DELETE其中一种  | 
与
1  | # 设置flag的初始值  | 
条件组合
1  | # 设置flag的初始值  | 
flag初始值为空值,若想执行do something逻辑。
- 或:condition0、condition1只需满足一项;
 - 与:condition2、condition3需要同时满足;
 
例
回到文章描述的需求,可以做如下配置即可实现:当请求前端域名时,满足一定条件直接负载到后端接口获取响应。
1  | location / {  | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 彩虹马的博客!
 评论