HAProxy para redirecionar http para https para vários nomes de domínio sem Terminação SSL

2

Estou usando o HAProxy para redirecionar o tráfego para diferentes servidores da Web na rede local.

Sem SSL ativado, posso rotear com base no nome do host como este (na seção frontend):

acl is_local hdr_end(host) -i mirror.skbx.co
acl is_kiev  hdr_end(host) -i kiev.skbx.co

use_backend kiev if is_kiev
default_backend wwwlocalbackend

Assim que eu habilito o SSL, tudo funciona no modo TCP via Pass through SSL mode.

Mas também preciso garantir que o HTTP seja redirecionado para HTTPS. Quando eu uso:

redirect scheme https if !{ ssl_fc }

na minha seção frontend HTTP da configuração HAProxy, eu recebo todas as solicitações redirecionadas para o backend padrão, então as regras acl mencionadas acima são ignoradas se a solicitação for redirecionada de redirect scheme .

Esta questão tem uma resposta sobre como fazê-lo funcionar via SSL Rescisão, onde o SSL é eliminado no nível HAProxy.

A minha pergunta é - o redirecionamento HTTP para HTTPS é possível, mantendo a passagem (modo tcp)?

A configuração completa das seções frontend e backend que eu tenho está em esta essência .

    
por Maxim V. Pavlov 31.07.2015 / 18:46

1 resposta

6

No modo TCP, o HAproxy na verdade não encerra o SSL, apenas passa os pacotes para o backend. Como https-frontend não pode decodificar os cabeçalhos nas linhas a seguir, apenas passa tudo para o default_backend .

Você terá que especificar um certificado na linha bind e executar o Frontend e o Backends em mode http .

Por exemplo:

frontend http-frontend
    bind 10.1.0.4:80

    redirect scheme https if !{ ssl_fc }

frontend https-frontend
    bind 10.1.0.4:443 ssl crt /etc/ssl/haproxy.pem

    option httplog
    mode http

    acl is_local hdr_end(host) -i mirror.skbx.co
    acl is_kiev  hdr_end(host) -i kiev.skbx.co

    use_backend kiev if is_kiev
    default_backend wwwlocalbackend

backend wwwlocalbackend
    mode http
    server 1-www 127.0.0.1:443

backend kiev
    mode http
    server 1-www 10.8.0.6:443

Em que /etc/ssl/haproxy.pem contém um certificado para todos os domínios que você deseja hospedar ou um certificado curinga que os cobre.

Se você tiver certificados separados para cada domínio, será necessário seguir a configuração de frontend ft_test da resposta aceita na pergunta que você postou ( Configurar vários certificados SSL no Haproxy ).

    
por 31.07.2015 / 19:11

Tags