我可以使用 HAProxy 将 SSL 传递到与其他虚拟主机共享 IP 的虚拟主机吗?
我尝试
frontend https
bind *:443 #ssl
mode tcp
default_backend port_443
backend port_443
mode tcp
server web42 www.example.com
Run Code Online (Sandbox Code Playgroud)
但我看到默认的网络服务器,而不是 www.example.com
我可以在前端执行 SNI,但是如何对后端说 - 这是针对 www.example.com 域的?
server web1 www.example.com:443 sni str(www.example.com) verify none
Run Code Online (Sandbox Code Playgroud)
也不行。
为了明确起见,网络服务器 www.default.com、www.example.com、www.example.net 都具有相同的 IP 和端口,例如 10.0.1.10:443 Apache/ngix 使用 SNI 选择正确的虚拟主机。
问题仍然没有解决。这里有一些图形
--------------------
|(All 10.0.1.10:443)
www2.example.com:443 -> HaProxy ->|www.default.com <- Apache vhost default
|www.example.com
|www.example.net
--------------------
Run Code Online (Sandbox Code Playgroud)
我想访问 www.example.com(使用 tcp 模式)
如果我有 www.example.com 和 www.example.net 的私钥。我可以访问 www.example.net (当用户输入 www.example.com 时)而不会出现安全问题吗?
您可以将连接传递到您想要的任何后端服务器/端口。
但我发现您的设置中缺少很多东西。
这是我自己的 HAProxy 设置,我使用它将必须共享全局 IPv4 地址的 https 连接转发到具有唯一全局 IPv6(和唯一私有 IPv4)的后端服务器。
frontend https
bind :443
mode tcp
option tcplog
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
use_backend goren_example_com if { req_ssl_sni -i awx.example.com }
use_backend goren_example_com if { req_ssl_sni -i goren.example.com }
use_backend goren_example_com if { req_ssl_sni -i tower.example.com }
backend goren_example_com
server goren 192.168.101.182:443 send-proxy-v2
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里进行 SNI 检查,并匹配 SNI 主机名以确定将连接发送到哪个后端。
然后我使用send-proxy-v2
它在后端连接上启用PROXY 协议。这将让我告诉后端连接发起的 IP 地址。我们使用此协议是因为X-Forwarded-For
在此设置中不可能。
但PROXY协议确实需要后端服务器知道它。为了实现这一点,需要对我的 nginx 设置进行一些小的更改,即:
listen 443 ssl http2 proxy_protocol;
listen [::]:443 ssl http2;
set_real_ip_from 192.168.101.1;
real_ip_header proxy_protocol;
Run Code Online (Sandbox Code Playgroud)
proxy_protocol
通过在listen
和 中指定real_ip_header
,nginx 现在知道通过 PROXY 协议获取客户端的真实 IP 地址。(请注意,我没有在 IPv6 侦听器上使用它,因为我仅通过 haproxy 代理 IPv4 连接。IPv6 连接直接进入,不需要代理。这是 IPv6 的一大优势。)
最后,旧版本的 nginx 使用 PROXY 协议的第 1 版,因此如果send-proxy-v2
inhaproxy.cfg
不起作用,您需要将其更改为send-proxy
.
(如果您是仍在使用 Apache 的人之一,请设置RemoteIPProxyProtocol on
。)
归档时间: |
|
查看次数: |
10869 次 |
最近记录: |