Nginx如何设置Django的https重定向

2013年08月22日NginxDjango设置

遇到的问题

出于网络安全考虑增加SSL协议的连接,但发现Django在重定向跳转的时候总是回到普通的HTTP协议,而不是HTTPS协议。查了资料看到HttpRequest.is_secure()方法用来判断是否https连接,如果是的话就返回True。在Django 1.4 之前只能在Python的环境上去设置,而1.4重新改写了is_secure()方法,可以自己指定判断的变量和值。

如何设置Nginx和Django

Google了好几篇文章,都说在Nginx配置文件中增加下面的设置:

proxy_set_header X-Forwarded-Protocol $scheme;

但因为我用的Nginx没有通过代理的方式,所以没有办法拿到值,需要修改为:

uwsgi_param HTTP_X_FORWARDED_PROTOCOL $scheme;

加在location /{}里面。然后再在Django工程的settings.py里增加 SECURE_PROXY_SSL_HEADER变量:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')

这种方法就是Nginx会设置SSL连接HTTP_X_FORWARDED_PROTOCOL的值为https,当然也要告诉Django判断的名称和值,详细参考Django文档 SECURE_PROXY_SSL_HEADER


关于麦客园

集基督信仰,IT技术,生活的家园,分享生活中的点点滴滴。关注Web前端, iOS, Android, 网络技术, Linux, 开源硬件等。

友情链接




联系麦客园


您的批评和鼓励都是我最大的支持。