共计 740 个字符,预计需要花费 2 分钟才能阅读完成。
本站提供 Linux 服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme
proxy_pass
是 Nginx 反向代理常用的一个指令,该指令存在一个小小的细节(坑),用过此命令的可能遇到过,某些时候看似逻辑正确,但访问出现 4xx
或5xx
一类的错误。proxy_pass
目标地址中末尾带 /
和不带 /
意义有所不同,下面一起来看一下。
例子
假如我访问的地址是http://domain.com/test/api
,存在下面的一段反向代理配置:
location ^~ /test/ {
#目标路径带有 /
proxy_pass https://192.168.2.6/;
}
可以看到反向代理的目标地址是 https://192.168.2.6/
,末尾带有/
当访问 http://domain.com/test/api
是最终会到达源站的https://192.168.2.6/api
假如目标地址是 https://192.168.2.6
末尾不带/
,配置如下:
location ^~ /test/ {
#目标路径不带 /
proxy_pass https://192.168.2.6;
}
当访问 http://domain.com/test/api
时,最终请求会到达源站的https://192.168.2.6/test/api
, 所以两者最终去请求源站的时候路径是不同的,需要根据自身业务来判断 proxy_pass 目标路径是否需要带/
,如果不清楚这个规则,要踩坑许久。
总结
- proxy_pass 目标路径带有
/
:此时location
中的路径不会追加到目标路径末尾 - proxy_pass 目标路径不带
/
:此时location
中的路径会追加到目标路径末尾再传递给源站
此文部分内容参考了:Nginx 增加二级目录的反向代理时,最常见的两个问题
正文完
星哥玩云-微信公众号