使用 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;
}
}