Nginx
nginx 的 haproxy 的 error_page 497 選項是否有替代方案?
使用 nginx 時,我只能使用特定於 nginx 的 497 錯誤程式碼
497 HTTP 請求發送到 HTTPS 埠
並使用此規則重定向到 https:
error_page 497 https://$host:$server_port$request_uri;
使用 haproxy 時,我知道的唯一解決方案是使用兩個埠,例如埠 80 和 443,但我只有一個埠 (8443)。
我嘗試了該
errorloc
選項,但是當客戶端嘗試連接到 https 埠時,我收到一個無法使用該errorloc
選項擷取的 ssl handshare 錯誤。理想情況下,我會使用以下內容,但這不起作用:
frontend http-in bind :8443 ssl crt /usr/local/etc/haproxy/ssl/fullchain.pem alpn h2,http/1.1 redirect scheme https code 301 if !{ ssl_fc } maxconn 50 default_backend backend-server
經過一些研究,事實證明這確實可以通過 HAProxy 實現(一個埠用於 https 和 http,並將所有 http 請求重定向到 https)
我終於在lukastribus的 HAProxy 論壇中找到了解決方案。
以下範例來自lukastribus:
frontend port801_combined mode tcp bind :801 tcp-request inspect-delay 2s tcp-request content accept if HTTP tcp-request content accept if { req.ssl_hello_type 1 } use_backend recir_http if HTTP default_backend recir_https backend recir_http mode tcp server loopback-for-http abns@haproxy-http send-proxy-v2 backend recir_https mode tcp server loopback-for-https abns@haproxy-https send-proxy-v2 frontend fe-https mode http bind abns@haproxy-https accept-proxy ssl crt /etc/ssl/private/unified-cert-file.pem # whatever you need todo for HTTPS traffic frontend fe-http mode http bind abns@haproxy-http accept-proxy # whatever you need todo for HTTP traffic
通過增加
redirect scheme https code 301
到前端 fe-http 部分,如下所示:
frontend fe-http mode http bind abns@haproxy-http accept-proxy redirect scheme https code 301
所有 http 請求都將被重定向到 https。