Ssl
如何使用 curl 檢查基於 haproxy sni 的規則?
我做了簡單的 HaProxy 配置,以通過基於 SNI 欄位的徹底流量。這是我的
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: SSL_ERROR_SYSCALL 連接到 example.com:443
顯然規則不起作用並且沒有合適的後端(這就是我得到 SSL_ERROR_SYSCALL 的原因)。如果我添加一些 default_backend,它將用於執行我的請求。
為什麼我的 cURL 請求沒有使用 HaProxy打開http://example.com ?
我將 curl 7.54.0 與最新的 OSX High Sierra 一起使用。
弄清楚了。cURL 請求絕對正確。
中缺少 2 個配置語句
haproxy.cfg
。為了使 sni-rules 起作用,您還需要:tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 }
節下
frontend
。