Como fazer o Django acreditar que acessar diretamente o IP é um determinado host no nginx

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.rudele, elas serão recusadas.

A solução geral empregada pela maioria das pessoas é definir um Hostcabeç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 Hostcontinua 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-Hostse 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;
}
}