Ssl

haproxy SSL“失敗鯨魚”維護頁面

  • December 21, 2012

我們正在使用 haproxy 的自定義錯誤頁面功能來顯示“失敗鯨魚”維護頁面,同時我們正在對我們的站點進行部署。

但是,由於 haproxy 無法向 SSL 使用者顯示自定義錯誤頁面,如果沒有可用的後端,我如何將使用者重定向到非 SSL 連接,以顯示“失敗鯨魚”?

我最終在負載均衡器上安裝了 stunnel,並通過隧道將流量重定向回埠 80。

HTTPs 客戶端 => haproxy:443 =>(沒有可用的後端,使用“備份”伺服器 127.0.0.1:4443)=> 127.0.0.1:443(stunnel)=> 127.0.0.1:80(haproxy,帶有故障鯨魚頁面)

haproxy.conf

listen SSL-via-shared-ip 1.2.3.2:443
  mode tcp
  option ssl-hello-chk
  #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
  option httpchk HEAD /test.txt HTTP/1.0

# list of web servers
server app1 1.2.3.4:443 check port 80 maxconn 60  
server app2 1.2.3.5:443 check port 80 maxconn 60  
server failwhale 127.0.0.1:4443 backup maxconn 500


   #error pages#
   ##these are in raw http, not just html ##
   errorfile 400 /etc/haproxy/errors/400.http
   errorfile 403 /etc/haproxy/errors/403.http
   errorfile 408 /etc/haproxy/errors/408.http
   errorfile 500 /etc/haproxy/errors/500.http
   errorfile 502 /etc/haproxy/errors/502.http
   errorfile 503 /etc/haproxy/errors/503.http
   errorfile 504 /etc/haproxy/errors/504.http

stunnel.conf

; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = all

options = NO_SSLv2

; PID is created inside the chroot jail
pid = /var/run/stunnel4/stunnel4.pid

; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

; Some debugging stuff useful for troubleshooting
debug = 7
output = /var/log/stunnel4/stunnel.log

; Certificate/key is needed in server mode and optional in client mode
cert = /etc/ssl/certs/stunnel.pem
key = /etc/ssl/certs/stunnel.pem


; Some security enhancements for UNIX systems - comment them out on Win32
;chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4

; Service-level configuration

[failwhale]
accept  = 4443
connect = 127.0.0.1:80
TIMEOUTclose = 0

據我了解,您無法從 haproxy 中重定向客戶端,因為它根本無法與 SSL 連接進行互動(無法解密請求或使用重定向加密響應)。連接必須轉到支持 SSL 的某些伺服器才能執行此操作。

我唯一能想到的就是使用 SSL 密鑰/證書和失敗的鯨魚頁面設置另一個網路伺服器(甚至可以在 haproxy 機器本身的某個奇怪埠上執行,使用localhost:4433或類似的東西),並讓 haproxy 發送維護期間到該伺服器的所有 SSL 連接。

引用自:https://serverfault.com/questions/276862