【问题标题】:Send full URL to backend server with proxy_pass使用 proxy_pass 将完整 URL 发送到后端服务器
【发布时间】:2022-02-04 12:38:21
【问题描述】:

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

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

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

但这可能就足够了:

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

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

我试过了:

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

几乎可以工作,但rewrite 的行为是,如果替换以http:// 开头,它会停止处理并发出重定向。 (Code here)。

【问题讨论】:

    标签: nginx nginx-reverse-proxy


    【解决方案1】:

    通过使用两个rewrite 指令来解决rewrite 的重定向行为,有一种巧妙的方法:

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2017-11-20
      • 2015-10-04
      • 2016-03-10
      • 1970-01-01
      • 2016-06-09
      • 2021-06-12
      • 1970-01-01
      • 2013-09-24
      相关资源
      最近更新 更多