Ou como fazer o Django mostrar a página correta do ELB (Elastic Load Balancer) da Amazon.
No Django 1.5, a variável ALLOWED_HOSTS foi introduzida com o objetivo de remover um vetor de ataque disponível se o host estiver sendo acessado de um domínio indefinido. O que é uma coisa boa, significa que se alguém acessar seu site por meio de um proxy que faz com que todas as solicitações pareçam estar vindo mysite.scammer.ru
dele, elas serão recusadas.
A solução geral empregada pela maioria das pessoas é definir um Host
cabeçalho em sua solicitação de proxy:
server {
listen 80;
listen 9040 default;
server_name www.example.com;
location / {
include proxy_params;
proxy_set_header Host www.example.com;
proxy_pass http://localhost:8040;
}
}
Com uma atualização para uma versão nunca do nginx, percebi que proxy_set_header Host
continua anexando hosts. O que não funcionou, pelo que posso dizer ao examinar o HTTP RFC Host não deveria ser um campo de vários valores.
Felizmente o Django tem uma variável USE X FORWARDED_HOST que irá procurar o host para verificar no cabeçalho HTTP X-Forwarded-Host
se definido como True
.
Portanto, minha nova configuração de trabalho é assim:
server {
listen 80;
listen 9040 default;
server_name www.example.com;
location / {
include proxy_params;
proxy_set_header X-Forwarded-Host www.example.com;
proxy_pass http://localhost:8040;
}
}