NGINX IP透明度SSLstream

我正在用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地址视为负载均衡器。