nginx反向代理proxy_pass绝对路径和相对路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx反向代理proxy_pass绝对路径和相对路径相关的知识,希望对你有一定的参考价值。

参考技术A 当访问 http://127.0.0.1/proxy/test/test.txt 时,nginx匹配到/proxy路径,把请求转发给192.168.137.181:8080服务,实际请求路径为
http://10.0.0.1:8080/test/test.txt ,nginx会去掉匹配的“/proxy”。

当访问 http://127.0.0.1/proxy/test/test.txt 时,nginx匹配到/proxy路径,把请求转发给 192.168.137.181:8080 服务,实际请求代理服务器的路径为
http://192.168.137.181:8080/proxy/test/test.txt , 此时nginx会把匹配的“/proxy”也代理给代理服务器。

当访问 http://127.0.0.1/proxy/test/test.txt 时,nginx匹配到/proxy路径,把请求转发给192.168.137.181:8080服务,实际请求代理服务器的路径为
http://10.0.0.1:8080/static01/test/test.txt 。
实际上2、3是一种情况,即加了“/”就会去掉匹配前缀。这就引出了下一个问题。

我们使用nginx的很多时候都需要去掉前缀。前缀只是为了让nginx用来区分转发到哪个服务器,不是实际URL的一部分。例如我们需要代理访问 http://10.0.0.1:8080/test/test.txt ,如果不去掉前缀,nginx代理访问的就是 http://192.168.137.181:8080/proxy/test/test.txt ,那么这时候就需要改变代理服务器原来写好的url,这是不合理的。
一个种方案是上面提到的proxy_pass后面加根路径“/”。另一种方案是使用正则重写url。例如:

这里的

就是路径重写,其中:

nginx 反向代理之 proxy_pass

参考技术A 格式: proxy_pass URL;
其中URL包含:传输协议(http://, https://等)、主机名(域名或者IP:PORT)、uri。

对于proxy_pass的配置有几种情况需要注意:

假设 server_name 为 www.xxx.com
当请求 http://www.xxx.com/aming/a.html 的时候,以上示例分别访问的结果是

以上是关于nginx反向代理proxy_pass绝对路径和相对路径的主要内容,如果未能解决你的问题,请参考以下文章

在设置 nginx 多 location 子路径反向代理时,必须设置 proxy_pass 也为子路径,名字不必相同

nginx 反向代理 proxy_pass 及对比nginx与haproxy反向代理服务器功能性能的优劣

Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口

Nginx系列之反向代理相关模块

nginx使用proxy_pass反向代理时cookie丢失问题解决方案

Nginx配置proxy_pass转发的/路径问题