2 votes

Page de maintenance "fail whale" de haproxy SSL

Nous utilisons la fonction de page d'erreur personnalisée de haproxy pour afficher une page de maintenance "fail whale" pendant que nous effectuons des déploiements sur notre site.

Cependant, comme haproxy ne peut pas montrer aux utilisateurs SSL la page d'erreur personnalisée, comment puis-je rediriger les utilisateurs vers une connexion non-SSL, pour montrer la "baleine d'échec" s'il n'y a pas de backends disponibles ?

2voto

Amy Anuszewski Points 1228

Si j'ai bien compris, vous ne pouvez pas rediriger les clients à partir de haproxy, car il ne peut pas interagir avec les connexions SSL (il ne peut pas décrypter la demande ou crypter la réponse avec la redirection). Pour ce faire, la connexion doit aller vers un serveur supportant le SSL.

La seule chose à laquelle je peux penser est de mettre en place un autre serveur web avec la clé/cert SSL et la page fail whale (qui pourrait même fonctionner sur un port étrange de la machine haproxy elle-même, utilisez localhost:4433 ou quelque chose comme ça), et demander à haproxy d'envoyer toutes les connexions SSL à ce serveur pendant la maintenance.

2voto

robbyt Points 1622

J'ai fini par installer stunnel sur l'équilibreur de charge, et par rediriger le trafic sur le port 80 à travers le tunnel.

HTTPs client => haproxy:443 => (pas de backends disponibles, utiliser le serveur 'backup' 127.0.0.1:4443) => 127.0.0.1:443 (stunnel) => 127.0.0.1:80 (haproxy, avec page failwhale)

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

1voto

sysadmin1138 Points 129885

HAProxy ne peut le faire que s'il met également fin aux connexions SSL. Dans cette configuration, le(s) serveur(s) HAProxy dispose(nt) des certificats SSL et communique(nt) avec le pool de serveurs via SSL (une nouvelle connexion) ou HTTP.

Une autre option consiste à disposer d'un serveur web doté d'un protocole SSL, destiné uniquement à servir la page "fail-whale", qui affichera la même page "fail-whale", quel que soit l'URI qui lui est transmis. De cette manière, vous pouvez conserver ce serveur comme serveur de "secours" et toute tentative de connexion se verra appliquer le principe de la baleine.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X