Nginx: tira o cabeçalho no HTTP, adicione o cabeçalho no HTTPS

7

Estou configurando um servidor Nginx para servir como um proxy reverso para servir um aplicativo do Django (executado no Gunicorn).

Meu problema é que eu quero meu site seguro com HTTPS, e assim eu quero que meu aplicativo Django seja capaz de determinar se uma conexão é segura ou não. Eu estou usando o Django 1.4, então eu tenho acesso ao SECURE_PROXY_SSL_HEADER , que eu configurei como SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') .

Agora, conforme mencionado na documentação, preciso garantir que o Nginx adicione apenas o cabeçalho quando necessário e retire-o quando não. Como eu gostaria que minha configuração do Nginx fosse o mais DRY possível, prefiro não ter dois arquivos de configuração (um para a porta 80 e outro para a porta 443).

Portanto, gostaria de saber se existe uma maneira no Nginx de determinar se a conexão é https e adicionar (ou remover) um cabeçalho de acordo.

    
por Thomas Orozco 07.05.2012 / 18:32

1 resposta

12

Esta solução não não descreve como remover um cabeçalho apenas em HTTP, como solicitado no título da pergunta.

Uma solução segura para o seu problema é adicionar

proxy_set_header  X-Forwarded-Protocol  $scheme;

Ele definirá X-Forwarded-Protocol para http nas solicitações HTTP e para https nas solicitações HTTPS.

Isso garante que esse cabeçalho seja substituído se o cliente o definir, conforme exigido por link .

OBSERVAÇÃO: Se você está compartilhando seu projeto Django, por favor avise os usuários o suficiente sobre isso se você está incluindo SECURE_PROXY_SSL_HEADER em settings.py , e melhor comente por padrão. / p>     

por 14.08.2012 / 07:32