在Nginx后面通过HTTPS访问Django Admin

我有djangonginx后面的uwsgi上运行。 当我尝试访问https://site/admin/我得到预期的login屏幕。 通过表单login似乎成功,但是,我只是最终回到login屏幕。 Firebug显示redirecthttp://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