2012-08-13 23 views
8

我已經在uwsgi後面的nginx中運行了django。當我嘗試訪問https://site/admin/時,我收到了預期的登錄屏幕。通過表單登錄似乎成功了,但是,我只是最終返回到登錄屏幕。 Firebug顯示一個重定向到簡單的http://site/admin/ url,然後由nginx將redirectec重定向到https url。通過HTTPS在Nginx後面訪問Django Admin

幫助!我很困惑如何強制管理應用程序只使用https網址。

注意這似乎是一個相關的,懸而未決的問題:https://example.com/admin redirects to https://admin in Django Nginx and gunicorn

回答

9

將以下內容添加到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 
+6

如果使用'proxy_pass'而不是uwsgi,則在nginx.conf中使用'proxy_set_header X-Forwarded-Protocol $ scheme'。 – 2013-03-27 22:00:09

2

以下應該是所有你需要將所有流量重定向到 HTTPS

location /site/admin/ { 
    rewrite^https://$host/$request_uri permanent; 
} 

如果管理應用不起作用,你能發佈你的實際nginx配置位嗎?如果沒有你的實際配置,你無法真正提出更多的建議。

+0

好主意,但我最終得到了不同的工作。 – justinzane 2012-08-16 19:50:38

+0

不適用於POST請求。特別是對於任何API回調。 – Antigluk 2016-05-30 15:20:05

0

更新的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在你的本地設置中。