Jed*_*son 3 ssl nginx load-balancing
我正在设置一个使用 NGINX 作为负载均衡器的服务器集群。所有请求都通过 HTTPS,因此负载均衡器使用流(SSL 直通)将请求直接传递到集群。
我需要终端服务器查看客户端 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试更改服务器块以包含proxy_set_header转发 IP,但没有通过 nginx 测试,说明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;
}
Run Code Online (Sandbox Code Playgroud)
我想它与无法更改 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;
...
}
Run Code Online (Sandbox Code Playgroud)
并在负载均衡器上
server {
listen 443;
proxy_protocol on; # Make sure this is enabled
proxy_pass $backend_cluster_map;
...
}
Run Code Online (Sandbox Code Playgroud)
应用程序现在看到的是客户端 IP 地址,而不是负载均衡器的 SSL 直通地址。
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |