nginx代理到代理

我觉得我一定是错过了一些明显的东西…但是这里就是这样。

是否可以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 URLuri部分,但没有成功。

也许你应该将proxy_http_version更改为1.1。 我看到你对path的担忧,但是我认为http版本将会更加相关。

祝你好运。