本文主要是介绍nginx之proxy_pass 易踩坑之处,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天在学习nginx时碰到一个容易踩坑的地方,特意总结一下:
在proxy_pass中配置代理地址 总体分为两类
1.末尾是否以 / 结尾;
2.代理地址中是否包含路径;
下面用4种情况来一一验证,访问路径为 http://localhost:8085/ngix/b.html。
验证前准备:
1. tomcat访问路径127.0.0.1:8080 (下图是tomcat下ngix项目)
2. nginx访问路径127.0.0.1:8085
1 proxy_pass中不包含路径
1.1 斜杠(/)结尾
location /ngix/ {
proxy_pass http://127.0.0.1:8080/;
}
地址栏中之所以写成http://localhost:8085/ngix/ngix/b.html, 是因为在nginx代理中不会将匹配上的路径带到请求中,nginx代理实际请求是http://127.0.0.1:8080/b.html,所以需要补上ngix路径,才能访问到tomcat下的ngix项目。
结论:以 / 结尾,在代理请求中不会携带location匹配的内容,nginx代理到 http://127.0.0.1:8080/ngix/b.html(proxy_pass + 匹配localtion 路径后的内容)。
1.2 结尾无斜杠(/)
location /ngix/ {
proxy_pass http://127.0.0.1:8080;
}
结论:结尾无 / ,在代理请求中会携带location匹配的内容,nginx代理到 http://127.0.0.1:8080/ngix/b.html(proxy_pass + 匹配localtion路径的内容 或 将proxy_pass中的IP和端口 替换到 url中的IP和端口)
2 proxy_pass中包含路径
2.1 斜杠(/)结尾
location /ngix/ {
proxy_pass http://127.0.0.1:8080/ngix/a/;
}
结论:nginx代理到 http://127.0.0.1:8080/ngix/a/b.html(proxy_pass + 匹配localtion路径后的内容)
2.2 结尾无斜杠(/)
location /ngix/ {
proxy_pass http://127.0.0.1:8080/ngix/a;
}
结论:代理到 http://127.0.0.1:8080/ngix/ab.html(proxy_pass + 匹配localtion路径后的内容),不会在路径上补全斜杠(/)
总结:
1)在proxy_pass中以斜杠(/)结尾(有无路径都行),nginx代理请求不会携带localhost匹配的路径。(proxy_pass + 匹配localtion路径后的内容)
2)在proxy_pass中无路径且末尾没有斜杠(/),nginx代理请求中会携带location匹配的路径。(proxy_pass + 匹配localtion路径的内容 或 将proxy_pass中的IP和端口 替换到 url中的IP和端口)
3)在proxy_pass中有路径且末尾没有斜杠(/),nginx代理请求中会携带location匹配的路径。(proxy_pass + 匹配localtion路径后的内容)
建议在配置nginx代理中,proxy_pass中最好不要添加路径
这篇关于nginx之proxy_pass 易踩坑之处的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!