我觉得我肯定忽略了一些显而易见的东西......但是我还是说了。
问题
是否可以配置 Nginx 代理,使其不修改 HTTP 请求 URI?如何做?
背景
我在正向代理(B)前面有一个 Nginx 反向代理(A)。
A 处的配置是一个普通的反向代理设置,如下所示:
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
。这正是我试图避免的。
值得一提的是,我曾尝试摆弄该uri
部分,proxy_pass URL
但没有成功。
答案1
也许您应该将 proxy_http_version 更改为 1.1。我明白您对路径的担忧,但我认为 http 版本总体上更为相关。
祝你好运。