Nginx配置proxy_pass带变量时/rest路径请求返回404如何解决
问题根因
这是Nginx proxy_pass 指令结合变量使用时的典型路径拼接规则差异导致的:
- 当
proxy_pass的值是纯静态域名(不带变量)时,Nginx会自动把location匹配到的前缀路径替换为proxy_pass后面指定的路径,你原本的写法是生效的。 - 当
proxy_pass的值包含变量(你这里用了$back_upstream动态变量)时,Nginx会跳过自动路径替换逻辑,直接把完整的原始请求URI拼接到proxy_pass指定的地址后面。
你访问http://my-url/rest/abc时,后端实际收到的请求路径是/rest//rest/abc,路径前缀重复导致404;而/api相关的配置因为proxy_pass后面没有加额外路径,拼接后的路径刚好符合预期,所以访问正常。
修复方案
直接修改/rest/匹配块的proxy_pass配置,删掉末尾多余的/rest/路径即可:
location /rest/ { proxy_pass http://$back_upstream; }
如果你需要自定义路径转发规则,也可以用rewrite指令显式控制路径:
location /rest/ { # break表示执行rewrite后不再匹配其他location rewrite ^/rest/(.*)$ /rest/$1 break; proxy_pass http://$back_upstream; }
配置修改完成后,先执行nginx -t校验配置是否合法,校验通过后执行nginx -s reload重载配置即可生效。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

