Como fazer com que o nginx encaminhe o cabeçalho HTTP_X_FORWARDED_PROTO?

16

Estou usando minha configuração de

nginx > apache/php

para

haproxy > nginx > apache/php

(usando haproxy 1.5-dev18 com suporte a ssl compilado)

Tanto o nginx quanto o haproxy são configurados corretamente para definir o cabeçalho HTTP_X_FORWARDED_PROTO. No entanto, quando o nginx obtém o tráfego SSL do haproxy, ele vê a conexão como http e define o cabeçalho como tal.

Como posso definir o nginx para encaminhar o cabeçalho HTTP_X_FORWARDED_PROTO se ele existir, mas caso contrário, continue definindo-o com base na conexão?

    
por Echo 14.06.2013 / 23:04

3 respostas

28

Eu descobri como resolver isso. O problema era que o nginx estava sobrescrevendo o cabeçalho configurado por haproxy nesta linha da minha configuração:

proxy_set_header X-Forwarded-Proto $scheme;

Eu consertei adicionando isso:

map $http_x_forwarded_proto $thescheme {
     default $scheme;
     https https;
 }   

e alterando a linha proxy_set_header para usar o novo esquema:

proxy_set_header X-Forwarded-Proto $thescheme;
    
por 17.06.2013 / 17:22
1

Não posso apenas comentar, então postei isso como uma resposta: você poderia nos dar parte ou toda a configuração do nginx para que possamos ver o que há de errado com isso? Possivelmente sua configuração HAProxy também?

O primeiro problema que posso pensar é que o seu HAProxy está fazendo terminação SSL. Para resumir, para descarregar seus servidores de back-end, um balanceador de carga pode ser configurado para fazer todo o ssl e, em seguida, se comunicar com seus servidores de back-end em HTTP. Como o esquema aqui:

Para lhe dar uma boa resposta à sua pergunta, você pode verificar se não tem nenhum problema de loopback na sua configuração http < > https? Talvez você possa redirecionar http para http, https para https e forçar o redirecionamento do http para https.

Você poderia checar também se você habilitou o ssl passthrough em sua configuração do HAProxy?

Outra solução poderia ser usar o mapa conforme descrito aqui: mas não é exatamente o que eu acho que você quer alcançar, não?

    
por 14.06.2013 / 23:27
0

Eu tive a mesma necessidade com o AWS ELB

Aqui está minha linha de solução:

proxy_set_header        X-Forwarded-Proto $http_x_forwarded_proto;
    
por 03.07.2017 / 04:12

Tags