我有django在nginx后面的uwsgi上运行。 当我尝试访问https://site/admin/
我得到预期的login屏幕。 通过表单login似乎成功,但是,我只是最终回到login屏幕。 Firebug显示redirect到http://site/admin/
url,然后由nginxredirect到https url。
帮帮我! 我很困惑如何强制pipe理应用程序只使用httpsurl。
注意这似乎是一个相关的,没有答案的问题: https://example.com/adminredirect到https:// admin在Django Nginx和gunicorn
将以下内容添加到nginx.conf中解决了我的问题。
location / { ... include uwsgi_params; uwsgi_param HTTP_X_FORWARDED_PROTOCOL https; uwsgi_param UWSGI_SCHEME $scheme; }
除了将以下内容添加到settings.py:
SESSION_COOKIE_SECURE = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') CSRF_COOKIE_SECURE = True
以下应该是所有您需要将管理应用的所有流量重定向到https
location /site/admin/ { rewrite ^ https://$host/$request_uri permanent; }
如果这不起作用,你可以发布你的实际nginx配置位? 如果没有你的实际配置,不能真正提出建议。
Django 1.8 settings.py的更新:
SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True SECURE_SSL_REDIRECT = True SECURE_REDIRECT_EXEMPT = [r'^(?!admin/).*']
对于您的开发工具,您可能需要在本地设置中覆盖SECURE_SSL_REDIRECT = False
。