Nginx 多if条件判断下的URI重写

关于Nginx URI重写的文章很多,基本都是用rewrite命令 把匹配的URI换成要重写的即可,然后后面跟上last 或者break之类的,比较直接。这里要分享的场景是多重if条件判断并且重写的URI部分是来自原有的URI。背景是这样的,我有两个服务A和B,当请求A的URI里包含参数collectSource=true并且是POST请求的时候,将原有的URI /i18n/api/xx...
摘要由CSDN通过智能技术生成

关于Nginx URI重写的文章很多,基本都是用rewrite命令 把匹配的URI换成要重写的即可,然后后面跟上last 或者break之类的,比较直接。这里要分享的场景是多重if条件判断并且重写的URI部分是来自原有的URI。

 

背景是这样的,我有两个服务A和B,当请求A的URI里包含参数collectSource=true并且是POST请求的时候,将原有的URI /i18n/api/xxxx?collectSource=true变成/i18n/source/api/xxxx?collectSource=true然后发到服务B端。

这里将collectSource=true和POST请求这两个条件分散在两个location 匹配里面。当第一个if条件匹配了collectSource=true,那么重写URI,在i18n后面加上了source这个路径,并且用了last来继续匹配location,然后就匹配到了第二个location,进入第二个if判断,如果请求方法是POST,那么直接用proxy_pass来代理到服务B上,如果不是POST,那么恢复原有的URI(也就是不带source这个路径)。

这里proxy_pass命令要特别注意,因为最后面加或者不加‘/’是有很大区别的。我在第二个if判断里面没有使用'/',那么它其实就是一个相对的路径,也就是https://serverA:8090后面加上location匹配的内容/i18n/source/xxxx,写全了就是https://serverA:8090/i18n/source/api/xxxx?collectSource=true。而在最后一个proxy_pass中,是加了'/'的,表示的是绝对的路径,也就是https://serv

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值