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;
}
}