Django的HttpResponseRedirect是http而不是https

前端之家收集整理的这篇文章主要介绍了Django的HttpResponseRedirect是http而不是https前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的服务器运行Django Gunicorn Nginx.

添加了SSL证书并配置了Nginx以将http重定向到https.当收到https请求时,Nginx将其作为http传递给Gunicorn.

我的程序有时返回HttpResponseRedirect,浏览器获得重定向响应并重新请求为http,因此Nginx重定向到https.

我怎么能避免这个?如何配置服务器,以便第一个重定向直接指向https URL?

最佳答案
Nginx配置中(位置块内),指定:

proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_redirect告诉Nginx,如果后端返回HTTP重定向,它应该保持原样.默认情况下,Nginx假设后端是愚蠢的,并试图变得聪明;如果后端返回一个称为“重定向http://localhost:8000/somewhere”的HTTP重定向,则Nginx将其替换为类似于http://yourowndomain.com/somewhere内容.但Django并不是愚蠢的(或者它可以配置为不是愚蠢的).

Django不知道请求是通过HTTPS还是普通HTTP发出的; Nginx知道这一点,但随后它对Django后端的请求始终是纯HTTP.我们告诉Nginx使用X-Forwarded-Proto HTTP头传递此信息,以便相关的Django功能(如request.is_secure())正常工作.您还需要在settings.py中设置SECURE_PROXY_SSL_HEADER =(‘HTTP_X_FORWARDED_PROTO’,’https’).

原文链接:https://www.f2er.com/nginx/434966.html

猜你在找的Nginx相关文章