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 许可协议。转载请注明来自 彩虹马的博客!
评论