我正在用NGINX设置一个服务器集群作为负载均衡器。 所有请求都通过HTTPS进行,因此负载均衡器使用直接将请求传递到具有stream(SSL传递)的群集。
我需要terminal服务器来查看客户端IP而不是负载均衡器IP。
我的nginx.conf
## Misc other config stuff stream { map $ssl_preread_server_name $backend_cluster_map { site.a cluster_1; site.b cluster_2; default cluster_1; } upstream cluster_1 { server 10.0.0.202:443; server 10.0.0.203:443; } upstream cluster_2 { server 10.0.0.204:443; server 10.0.0.205:443; } server { listen 443; proxy_pass $backend_cluster_map; ssl_preread on; } }
我试图改变服务器块,以包括proxy_set_header转发IP,但没有通过nginxtesting,说明proxy_set_header directive is not allowed here 。
server { listen 443; proxy_protocol on; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Fowarded-Proto https; proxy_set_header X-Fowarded-For $remote_addr; proxy_set_header X-Fowarded-Host $remote_addr; proxy_pass $backend_cluster_map; ssl_preread on; }
我想它与无法更改SSL请求有关。 任何替代品? 我试图不在负载平衡器上终止SSL。
根据Steffen Ullrich所说的,我遵循https://www.nginx.com/resources/admin-guide/proxy-protocol/ 。
在我添加的最终服务器上
server { listen 443 ssl proxy_protocol; ... set_real_ip_from 10.0.0.201; real_ip_header proxy_protocol; proxy_set_header X-Real-IP $proxy_protocol_addr; proxy_set_header X-Fowarded-For $proxy_protocol_addr; ... }
和负载平衡器上
server { listen 443; proxy_protocol on; # Make sure this is enabled proxy_pass $backend_cluster_map; ... }
现在,应用程序使用SSL直通将客户端IP地址视为负载均衡器。