我正在尝试通过添加 [req.ssl_sni] 来扩展自定义 haproxy 日志格式。在 Ubuntu 上使用的 haproxy 版本是 1.6.3。
前端配置如下:
bind *:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
tcp-request content reject
log-format [...]{%[req.ssl_sni]}
其中[...]
表示其他日志选项运行正常。前端以 TCP 模式运行,转发 TLS 会话而不解密它们。
预期的日志输出将类似于{my.server.com}
有效 TLS 会话的输出。我看到的日志输出始终是{-}
(破折号而不是服务器名称),即使后端服务器成功处理了 TLS 会话也是如此。我必须进行哪些更改才能在日志中看到实际的 SNI 值?
答案1
在接受之前使用捕获为我解决了这个问题。
frontend https-in
mode tcp
tcp-request inspect-delay 3s
tcp-request content capture req.ssl_sni len 10
log-format "capture0: %[capture.req.hdr(0)]"
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend test_0 if req.ssl_sni -m end /test
在这里找到解决方案:https://discourse.haproxy.org/t/log-sni-in-tcp-mode/1534/2
答案2
也许问题出在使用的名称上?我在问题中看到“req.ssl_sni”,在 SNI 示例中看到“req_ssl_sni”。