Nginx服务HTTPS响应重定向

时间:2018-06-22 09:53:58

标签: django http nginx https uwsgi

Django + Nginx + uWSGI环境。

我一直在努力解决以下问题:

django应用程序可确保用户在通过@login_required装饰器访问资源之前已登录。 在用户会话期满后的浏览器中,如果用户仍尝试访问某些资源,则Django行为(通过login_required)是将HttpResponseRedirect返回给settings.py

中提到的LOGIN_URL。

在HttpResponseRedirect对象中构造的url格式类似于:

/login/?next=/api/resource%3F_%3D1529658942988

浏览器会收到带有Location标头的HTTP 302状态代码,例如:

http://some.ip.address/login/?next=/api/resource%3F_%3D1529658942988

由于这是Http(而不是Https),因此浏览器阻止是由于有效的混合内容

我如何指示Nginx使用Https为浏览器提供这些重定向?

以下是Nginx配置

server {
    listen 80;
    server_name  localhost;
    rewrite ^ https://$host$request_uri? permanent;
}

server {
    listen       443  ssl;
    server_name  localhost;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers RC4:HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout  10m;
    ssl_prefer_server_ciphers   on;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8889;
        proxy_set_header X-Forwarded-For
        $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        client_max_body_size 700m;
    }   
}

0 个答案:

没有答案