我需要将HTTPS流从HAProxy重定向到Nginx,而不需要SSL终止,并且不丢失有关原始客户端IP的信息。不幸的是,我不能更改Nginx上默认的443站点的配置,因为它是由Synology配置维护的。
我在考虑在Nginx上新的侦听端口,接受来自HAProxy的代理协议,并将其内部重定向到本地443端口,无需SSL解码/编码,而是传递从HAProxy获取的原始客户端IP。这有可能吗?
编辑:背景是,我在同一个外部443端口上隧道化了OpenVPN和web服务,因此实际上如下所示:
router 443 TCP -> HAProxy -> SNI check -> stunnel -> OpenVPN
|
------> SSL termination -> Nginx 443 HTTPS我使用HAProxy是因为ngx_stream_ssl_preread_module在Synology的内置Nginx上不可用。
编辑:我认为情况和问题可以更通用:
Nginx:
port X accessed via proxy protocol with SSL/TLS
port Y如何使用有关源客户端IP的信息将流从端口X传递到Y,而不需要SSL终止?在端口Y上使用proxy_protocol听指令是唯一可能的选择吗?
发布于 2017-08-11 14:25:19
一个可能的解决方案是使用HAProxy进行SSL桥接。这意味着HAProxy将:
解密SSL连接需要HAProxy在HTTP模式下运行,但同时HAProxy应该接收到达同一443端口的隔离通信量。因此,我能想到的解决方案是首先通过一个虚拟后端来分割两个流量。
当然,这将带来额外的额外成本,但如果没有真正的高负荷,它将不会引人注目。
frontend ft_ssl
bind *:443
mode tcp
acl web_traffic req_ssl_sni -i <web-domain>
acl stunnel_traffic req_ssl_sni -i <stunnel-domain>
use_backend bk_ssl_dummy if web_traffic
use_backend bk_ssl_stunnel if stunnel_traffic
backend bk_ssl_stunnel
mode tcp
server stunnel1 <IP>:<PORT> check
backend bk_ssl_dummy
mode tcp
server web_ssl_offload 127.0.0.1:8888 send-proxy-v2-ssl-cn check
frontend ft_web_offload
bind 127.0.0:8888 ssl crt <path-to-crt> accept-proxy
mode http
http-request set-header X-Real-IP %[src]
default_backend bk_ssl_nginx
backend bk_ssl_nginx
mode http
server nginx1 <sIP>:443 ssl check连接在路由到Nginx时会被重新加密,因为我们在服务器行中使用了ssl param。
将Nginx配置为使用proxy-protocl将使您拥有一个更简单的HAProxy conf,因此只有当您不能更改Nginx时,此解决方案才有意义。
https://serverfault.com/questions/867502
复制相似问题