nginx proxy_pass 代理主机的 proxy_set_header

nginx proxy_pass 代理主机的 proxy_set_header

使用 NGINX 作为反向代理,我想标记请求可以在哪个负载均衡器/代理上,并将其传递给最终应用服务器...

例如,我们有 2 个入口连接,使用循环 DNS 连接 3 个负载均衡器,

因此,连接一有 3 个公共 IP,连接二有 3 个 IP。每对都指向一个负载均衡器,并且它们使用代理传递上游将流量发送到 10 个 Web /应用服务器。

我想标记请求来自 3 个 LB 中的哪一个,如果您知道怎么做的话,我也很乐意根据连接对其进行标记。


upstream web_cluster {
    random;
    # web server ip addresses x 10
}

location / {
    proxy_pass                      http://web_cluser;
    proxy_set_header                Proxy $proxy_server_host_name; // here
    proxy_set_header                Route $proxy_server_public_ip; // here
    proxy_pass_request_headers      on;
}

所有服务器都是通过 Ansible 脚本部署的,所以我无法将服务器名称硬编码到选项中proxy_set_header

谢谢

答案1

为了标记所有这些,我们可以更改您的配置文件以使用map指令将远程 IP 地址映射到相应的负载均衡器名称,并使用$proxy_host变量来设置Proxy-Host标头。

upstream web_cluster {
    server 10.0.0.1;
    server 10.0.0.2;
    server 10.0.0.3;
    # add more servers here as needed
}

map $remote_addr $proxy_host {
    192.168.1.1  "lb1";
    192.168.1.2  "lb2";
    192.168.1.3  "lb3";
    # add more mappings here as needed
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://web_cluster;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Proxy-Host $proxy_host;
    }
}

相关内容