对于John C的答案的第二部分,以及Django 1.4 + …
你可以将更request.scheme
改为,而不是扩展HttpResponseRedirect https
。因为Django在Nginx的反向代理后面,所以它不知道原始请求是安全的。
在你的Django设置中,设置SECURE_PROXY_SSL_HEADER设置:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
然后,你需要Nginx在反向代理中设置自定义标头。在Nginx网站设置中:
location / {
# ...
proxy_set_header X-Forwarded-Proto $scheme;
}
这样request.scheme == ‘https’并request.is_secure()返回True。 request.build_absolute_uri()返回https://…等等