我正在尝试设置 HAProxy 以使用 PROXY 协议传递 SSL 信息。到目前为止,我还没有成功。我的测试配置:
global
chroot /tmp/haproxy-chroot
log stderr format raw local0 debug
defaults
mode tcp
frontend testpp
bind *:5000
mode tcp
option tcplog
option logasap
log global
timeout client 1s #15s
default_backend nginx
backend nginx
mode tcp
log global
timeout server 1s #20s
timeout connect 1s #10s
server nginx1 localhost:443 send-proxy-v2-ssl
但是,当我运行 tcpdump 时,我没有看到额外的数据:
0x0000: 4500 029e 0918 4000 4006 3140 7f00 0001 E.....@[email protected]@....
0x0010: 7f00 0001 c55c 05a3 905c 04de 5983 fd53 .....\...\..Y..S
0x0020: 8018 0156 0093 0000 0101 080a 96ee 0dcb ...V............
0x0030: 96ee 0dcb 0d0a 0d0a 000d 0a51 5549 540a ...........QUIT.
0x0040: 2111 0014 47a2 f3d2 0a01 015c d6b2 1388 !...G......\....
0x0050: 2000 0500 0000 0000 1603 0102 4101 0002 ............A...
^-------------------TLS starts here
如果我只使用send-proxy-v2
(否-ssl
)运行,我就会看到完全相同的东西。
我是否遗漏了有关其应如何运作的一些信息?
答案1
从您的配置来看,HAProxy 不处理连接的 SSL 部分,因此它无法在 PROXY 协议标头中提供 SSL 信息。
crt <cert>
向您的前端添加一个指令bind
,您应该在 PROXY 协议标头中看到 SSL 信息。
如果你仔细想想,这很正常,因为如果 HAProxy 尽管没有处理 SSL 终止却向你提供该信息,它就无法适当地请求客户端证书、提供密码套件或握手期间协商的任何其他选项。
答案2
要添加到@Ginnungagap的答案,您可以通过设置来在tcpdump输出中查看其他代理协议TLV send-proxy-v2 proxy-v2-options crc32c
。无需SSL终止。