Eu tenho nginx servindo arquivos estáticos e solicitações de proxy para um servidor django interno. Isso tudo funciona bem, mas eu tenho uma visão que retorna um redirecionamento 302 de volta para a página do Referer, efetivamente fazendo uma atualização do navegador a partir de um clique no link.
Quando não é servido através do nginx, isso funciona e o aplicativo retorna o 302 com o cabeçalho Location definido para a mesma página, que é o que eu quero. No entanto, quando servido por meio do nginx, ele redireciona de volta para "/". Parece que não importa o que eu tente, sempre faz o mesmo.
Eu verifiquei se o django está recebendo o cabeçalho do referenciador de solicitação, que é. Eu tentei proxy_redirect
comentado, definido como off
e default
e / /
. Não posso usar o último porque retira o número da porta que preciso no momento para testar.
Aqui está minha configuração do nginx:
upstream django {
server unix:/run/waitress/django.sock;
}
server {
listen 80 backlog=4096;
server_name www.example.co.uk;
charset utf-8;
client_max_body_size 20M;
root /var/www/static_public;
location /media {
sendfile on;
sendfile_max_chunk 500k;
tcp_nopush on;
}
location /static {
sendfile on;
sendfile_max_chunk 100k;
tcp_nopush on;
}
# favicon redirect
location ~ ^/[a-z][a-hj-z][a-z-]+\.(png|xml|ico|json|svg)$ {
return 301 /static/site/img$request_uri;
}
location / {
proxy_pass http://django/;
#proxy_redirect what do I put here????;
proxy_set_header Host $host;
#proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx está passando o cabeçalho Referer sem defini-lo explicitamente.
Alarme falso!
Acontece que minha visão do django estava retornando o redirecionamento "/" devido ao cabeçalho do referenciador não ser considerado
is_safe_url
por causa da minha configuração de teste :/proxy_redirect off;
está trabalhando para mim.