我使用 nginx 为内部 django 服务器提供静态文件和代理请求。这一切基本都运行正常,但我有一个视图,它会将 302 重定向返回到 Referer 页面,从而有效地通过链接单击来刷新浏览器。
当不通过 nginx 提供服务时,此方法有效,并且应用程序返回 302,并将 Location 标头设置为同一页面,这正是我想要的。但是,当通过 nginx 提供服务时,它会重定向回“/”。似乎无论我尝试什么,它总是做同样的事情。
我已检查 django 是否正在接收请求 referer 标头,确实如此。我尝试过proxy_redirect
将其注释掉、设置为off
和default
和/ /
。我不能使用后者,因为它会删除我目前测试所需的端口号。
这是我的 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 标头但没有明确设置它。
答案1
虚惊!
事实证明,由于 referer 标头,我的 django 视图返回了“/”重定向不是is_safe_url
因为我的测试设置而被认为:/
proxy_redirect off;
正在为我工作。