我有 nginx 为内部 django 服务器提供静态文件和代理请求。这一切都很好,但我有一个视图,它返回一个 302 重定向回引荐页面,有效地从链接点击进行浏览器刷新。
当不通过 nginx 提供服务时,它可以工作,并且应用程序返回 302 并将 Location 标头设置为同一页面,这就是我想要的。但是,当通过 nginx 提供服务时,它会重定向回“/”。似乎无论我尝试什么,它总是一样。
我已经检查过 django 正在接收请求引用标头,它就是。我试过proxy_redirect
注释掉,设置为off
and default
and / /
。我不能使用后者,因为它会删除我目前需要进行测试的端口号。
这是我的 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 在没有明确设置的情况下传递了 Referer 标头。
虚惊!
事实证明,我的 django 视图正在返回“/”重定向,因为由于我的测试设置而没有考虑引用标头:/
is_safe_url
proxy_redirect off;
正在为我工作。