haproxy SSL“fail whale”维护页面

haproxy SSL“fail whale”维护页面

我们正在使用 haproxy 的自定义错误页面功能在对我们的站点进行部署时显示“失败鲸鱼”维护页面。

但是,由于 haproxy 无法显示 SSL 用户自定义错误页面,如果没有可用的后端,我该如何将用户重定向到非 SSL 连接,以显示“失败鲸鱼”?

答案1

据我了解,您无法从 haproxy 内部重定向客户端,因为它根本无法与 SSL 连接交互(无法解密请求或使用重定向加密响应)。连接必须转到具有 SSL 支持的某个服务器才能执行此操作。

我唯一能想到的就是用 SSL 密钥/证书和失败鲸鱼页面设置另一个 Web 服务器(甚至可以在 haproxy 机器本身的一些奇怪端口上运行,使用localhost:4433或类似的东西),并让 haproxy 在维护期间将所有 SSL 连接发送到该服务器。

答案2

我最终在负载均衡器上安装了 stunnel,并通过隧道将流量重定向回端口 80。

HTTPs 客户端 => haproxy:443 => (没有可用的后端,使用“备份”服务器 127.0.0.1:4443)=> 127.0.0.1:443(stunnel)=> 127.0.0.1:80(haproxy,带有 failwhale 页面)

haproxy配置文件

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

隧道配置文件

; 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

答案3

HAProxy 能够做到这一点的唯一方法是终止 SSL 连接。在此设置中,HAProxy 服务器将拥有 SSL 证书,并且它将通过进一步的 SSL(新连接)或直接 HTTP 与服务器池进行通信。

另一个选择是拥有一个启用 SSL 的 Web 服务器,仅用于故障鲸鱼服务,无论传递的 URI 是什么,它都会提供相同的故障鲸鱼页面。这样,您可以将该服务器保留为“备份”服务器,并且任何连接尝试都将获得鲸鱼的好处。

相关内容