haproxy SSL página de manutenção “fail whale”

2

Estamos usando o recurso de página de erro personalizada do haproxy para exibir uma página de manutenção de "falha de baleia" enquanto fazemos implantações em nosso site.

No entanto, como o haproxy não pode mostrar aos usuários do SSL a página de erro personalizada, como posso redirecionar os usuários para uma conexão não SSL, para mostrar a "falha da baleia" se não houver back-ends disponíveis?

    
por robbyt 03.06.2011 / 23:25

3 respostas

2

Acabei instalando o stunnel no balanceador de carga e redirecionando o tráfego de volta para a porta 80 através do túnel.

Cliente HTTPs = > haproxy: 443 = > (sem back-end disponível, use o servidor de 'backup' 127.0.0.1:4443) = > 127.0.0.1:443 (stunnel) = > 127.0.0.1:80 (haproxy, com página 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
    
por 04.06.2011 / 20:23
2

Pelo que entendi, você não pode redirecionar os clientes de dentro do haproxy, já que ele não pode interagir com as conexões SSL (não é possível descriptografar a solicitação ou criptografar a resposta com o redirecionamento). A conexão tem que ir para algum servidor com suporte SSL para fazer isso.

A única coisa em que consigo pensar é configurar outro servidor web com a chave SSL / cert e a página fail whale (pode até estar rodando em alguma porta estranha na própria máquina haproxy, use localhost:4433 ou algo parecido ), e ter haproxy enviar todas as conexões SSL para esse servidor durante a manutenção.

    
por 04.06.2011 / 00:20
1

A única maneira pela qual o HAProxy pode fazer isso é se também está finalizando as conexões SSL. Nessa configuração, os servidores HAProxy teriam os certificados SSL e se comunicariam com o pool de servidores via SSL adicional (uma nova conexão) ou HTTP direto.

Outra opção é ter um servidor da web ativado para SSL apenas para o serviço de falha de baleia que servirá a mesma página de falha de baleia, não importa qual URI seja passada. Dessa forma, você pode manter esse servidor como o servidor de 'backup' e qualquer tentativa de conexão será benéfica para as baleias.

    
por 04.06.2011 / 00:43