nginx 代理到代理

nginx 代理到代理

我觉得我肯定忽略了一些显而易见的东西......但是我还是说了。

问题

是否可以配置 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 版本总体上更为相关。

祝你好运。

相关内容