forwardfor está faltando informação

2

Eu uso a seguinte configuração para balancear a carga das conexões https, usando o haproxy 1.4.8. O descarregamento de SSL é feito pelo apache.

listen ssl_to_waf 192.168.101.54:443
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    server wafA 192.168.101.61:444 check

listen ssl_from_waf 192.168.101.61:445
    balance roundrobin
    option forwardfor
    server webA 192.168.101.46:80 check

Para solicitações HTTP isso funciona muito bem, os pedidos são distribuídos para os meus servidores Apache muito bem. Mas, para solicitações HTTPS, perco as informações "encaminhar". Eu preciso salvar o endereço IP do cliente. Como posso usar o HAproxy para balancear a carga em vários servidores SSL, permitindo que esses servidores saibam o endereço IP do cliente?

    
por FAFA 14.11.2012 / 11:00

3 respostas

1

Resposta curta: você não pode.

O HAProxy não entende o SSL e, portanto, equilibra essas conexões no modo TCP. A opção forwardfor não significa nada no modo TCP, pois é um cabeçalho HTTP.

Tudo o que li sobre SSL e HAProxy recomenda usar algum outro software na frente do HAProxy para lidar com o descarregamento de SSL. Algumas das sugestões foram Pound e nginx, entretanto, foi levantado o ponto válido de que eles são servidores proxy de balanceamento de carga e por que você introduziria complexidade extra e um salto extra quando você poderia apenas ter um deles lidando com balanceamento de carga e remover HAProxy inteiramente?

    
por 14.11.2012 / 15:09
1

Atualize para o haproxy 1.5-dev12 e habilite o descarregamento de SSL. Em seguida, os servidores de backend obtêm uma conexão HTTP mesmo quando o cliente está usando SSL. E como o haproxy consegue ver dentro das sessões SSL, ele pode adicionar o cabeçalho forwardfor.

    
por 14.11.2012 / 16:41
0

Eu nunca sugeriria usar o software dev em ambientes de produção. Eu uso nginx para ssl na frente de ha proxy nas mesmas máquinas. Funciona como um encanto, mesmo sob cargas pesadas. Seus servidores apache receberão tráfego http. Você precisa enviar o cabeçalho x-forwarded-para para o apache e, em seguida, instalar o módulo mod-rpaf para que o apache possa ver o ip do cliente. Você também pode precisar definir um env de env de apache para que os aplicativos saibam que a conexão estava em ssl.

    
por 15.11.2012 / 05:16