[req.ssl_sni]を追加して、カスタムhaproxyログ形式を拡張しようとしています。使用されるhaproxyバージョンはUbuntuでは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セッションを復号化せずに転送します。
予想されるログ出力は、有効なTLSセッションの{my.server.com}
のようなものになります。私が見ているログ出力は、TLSセッションがバックエンドサーバーによって正常に処理された場合でも、常に{-}
(サーバー名の代わりにダッシュ)です。ログに実際のSNI値を表示するには、何を変更する必要がありますか?
受け入れる前にキャプチャを使用すると、解決しました。
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
たぶん問題は使用された名前にありましたか?質問に「req.ssl_sni」が表示され、SNIの例に「req_ssl_sni」が表示されます。