我觉得我一定是错过了一些明显的东西…但是这里就是这样。
题
是否可以configuration一个Nginx的代理,使其不会修改HTTP请求的URI? 怎么样?
背景
我有一个Nginx反向代理(A)在转发代理(B)的前面。
在A的configuration是一个简单的香草反向代理设置,看起来像这样:
upstream upstreamproxy { server 192.168.0.69:80; } location / { proxy_set_header Host $http_host; proxy_pass http://upstreamproxy; proxy_redirect off; proxy_buffering off; }
转发代理B也是普通的香草,所以期待看到这样的代理请求:
GET http://www.example.com/foo HTTP/1.1 User-Agent: curl/7.30.0 Host: www.example.com Accept: */* Proxy-Connection: Keep-Alive
问题是,反向代理A重写HTTP请求URI如下所示:
发出示例请求:
my-client$ curl --proxy http://<proxy-A IP address>:80 http://www.example.com/foo
看看代理A正在做什么:
proxy-A$ ngrep -W byline tcp and port 80 #### T <my-client IP address>:38038 -> <proxy-A IP address>:80 [AP] GET http://www.example.com/foo HTTP/1.1. User-Agent: curl/7.30.0. Host: www.example.com. Accept: */*. Proxy-Connection: Keep-Alive. . ##### T <proxy-A IP address>:57211 -> 192.168.0.69:80 [AP] GET /foo HTTP/1.0. Host: www.example.com. Connection: close. User-Agent: curl/7.30.0. Accept: */*. Proxy-Connection: Keep-Alive.
请注意,请求URI已从http://www.example.com/foo
重写为/foo
。 这就是我想要避免的。
FWIW,我已经试过绕过proxy_pass URL
的uri
部分,但没有成功。
也许你应该将proxy_http_version更改为1.1。 我看到你对path的担忧,但是我认为http版本将会更加相关。
祝你好运。