配置 nginx 以从上游代理应用程序传递重定向

配置 nginx 以从上游代理应用程序传递重定向

我使用 nginx 为内部 django 服务器提供静态文件和代理请求。这一切基本都运行正常,但我有一个视图,它会将 302 重定向返回到 Referer 页面,从而有效地通过链接单击来刷新浏览器。

当不通过 nginx 提供服务时,此方法有效,并且应用程序返回 302,并将 Location 标头设置为同一页面,这正是我想要的。但是,当通过 nginx 提供服务时,它会重定向回“/”。似乎无论我尝试什么,它总是做同样的事情。

我已检查 django 是否正在接收请求 referer 标头,确实如此。我尝试过proxy_redirect将其注释掉、设置为offdefault/ /。我不能使用后者,因为它会删除我目前测试所需的端口号。

这是我的 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;正在为我工​​作。

相关内容