SNIフィールドに基づいて完全なトラフィックを通過させる単純なHaProxy構成を作成しました。こちらが私のhaproxy.cfg
です
defaults
log global
timeout client 50s
timeout client-fin 50s
timeout connect 5s
timeout server 10s
timeout tunnel 50s
frontend tcp-0_0_0_0-443
bind *:443
mode tcp
acl sni_acl_example_com req.ssl_sni -m sub example.com
use_backend example_com_be if sni_acl_example_com
backend example_com_be
mode tcp
server name1 93.184.216.34
次のDockerfileを使用してHaProxyを実行します。
FROM haproxy:1.7.9-Alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
EXPOSE 443
および次のコマンド:docker build -t my-haproxy . && docker run -p 443:443 --rm -d --name my-running-haproxy my-haproxy
ここで、sni_acl_example_com
というルールがcURL
を使用して期待どおりに機能するかどうかを確認します。
curl -k -X 'GET' -H 'Host: example.com' --resolve example.com:443:127.0.0.1 https://example.com
結果は次のとおりです。
curl:(35)LibreSSL SSL_connect:example.com:443に接続するSSL_ERROR_SYSCALL
明らかに、ルールは機能せず、適切なバックエンドがありません(そのため、SSL_ERROR_SYSCALLを取得します)。 default_backendを追加すると、代わりにそれがリクエストの実行に使用されます。
CURLリクエストが開かないのはなぜですか http://example.com HaProxyを使用していますか?
最新のOSX High Sierraでcurl 7.54.0を使用しています。
理解した。 cURLリクエストは完全に正しいです。
haproxy.cfg
に2つの構成ステートメントがありませんでした。 sniルールを機能させるには、以下も必要です。
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
frontend
セクションの下。