Como obtenho o nginx para emitir 301 solicitações para a localização HTTPS, quando o SSL é tratado por um balanceador de carga?

4

Percebi que há uma funcionalidade ativada no nginx por padrão, em que uma solicitação de URL sem uma barra final para um diretório que existe no sistema de arquivos automaticamente tem uma barra adicionada por meio de um 301 de redirecionamento.

Por exemplo se o diretório css existir dentro da minha raiz, a solicitação de http://example.com/css resultará em 301 a http://example.com/css/ .

No entanto, tenho outro site em que o SSL é descarregado por um balanceador de carga. Nesse caso, quando eu solicitar https://example.com/css , o nginx emitirá um redirecionamento 301 para http://example.com/css/ , apesar do cabeçalho HTTP_X_FORWARDED_PROTO estar definido como https pelo balanceador de carga.

Este é um erro nginx? Ou uma configuração que eu perdi em algum lugar?

    
por growse 15.11.2012 / 15:28

2 respostas

2

O Nginx não procura por HTTP_X_FORWARDED_PROTO e não é um bug. É apenas falta de tal funcionalidade.

Você deve configurar seu frontend para ajustar o cabeçalho do local nas respostas , ou substituí-lo por outro nginx (já que o próprio nginx é um ótimo load-balancer e SSL-terminator).

    
por 16.11.2012 / 01:21
2

Parece que o LB está fazendo terminação SSL e o nginx apenas recebe um pedido HTTP. O Nginx não modifica nenhum dos cabeçalhos HTTP que recebe. Você pode fazer isso usando regras de reconfiguração que verifiquem se HTTP_X_FORWARDED_PROTO está definido ou não e, em conformidade, reconfigura a solicitação. O FYI nginx não suporta declarações "if" aninhadas ou complexas, portanto você terá que recorrer ao método descrito no link abaixo.

link

    
por 20.11.2012 / 03:56