使用 proxy_pass 将完整的 URL 发送到后端服务器

Send full URL to backend server with proxy_pass

我想让 Nginx 充当后端服务的反向代理,但是与后端服务的连接本身必须通过另一个代理:

 [nginx] -> [HTTP proxy] -> [backend service]

Nginx 似乎没有办法配置传出连接通过代理(例如,http_proxy 环境变量被忽略)。

但这可能足以:

  1. proxy_pass 目标设置为 HTTP 代理服务器地址。

  2. 说服 Nginx 像 GET http://backend/path/etc 一样将完整的目标 URL 发送到代理,而不仅仅是 GET /path/etc.

我试过了:

rewrite ^/prefix/(.*) http://backend/ break;
proxy_pass http://proxy;

几乎 有效,但 rewrite is that it stops processing and issues a redirect if the replacement begins with http://. (Code here).

的行为

通过使用两个 rewrite 指令可以绕过 rewrite 的重定向行为:

location /prefix/ {
    rewrite ^/prefix/(.*) xxx://backend/ ;
    rewrite ^xxx(.*) http break;
    proxy_pass http://proxy;
}

因此,对 http://frontend/prefix/x 的传入 GET 请求将导致与代理服务器的连接并发送 GET http://backend/x,后者将作为 GET /x.[=16= 转发到后端服务器]