2012-08-13 29 views
8

djangoはnginxの背後にあるuwsgiで動作しています。 https://site/admin/にアクセスしようとすると、予想されるログイン画面が表示されます。フォームを介したログインは成功したようですが、ログイン画面に戻ってしまいます。 Firebugは、平文http://site/admin/ urlへのリダイレクトを表示します。これは、nginxによってhttps urlにリダイレクトされます。Nginxの背後にあるHTTPS経由でDjango Adminにアクセス

ヘルプ!私は、管理アプリケーションがhttpsのURLだけを使用するように強制する方法については混乱しています。

注これは、関連する、未回答の質問のようです:https://example.com/admin redirects to https://admin in Django Nginx and gunicorn

答えて

9

次をnginx.confに追加すると、私の問題が解決しました。 settings.pyに次の追加とともに

location/{ 
    ... 
    include     uwsgi_params; 
    uwsgi_param    HTTP_X_FORWARDED_PROTOCOL https; 
    uwsgi_param    UWSGI_SCHEME $scheme; 
} 

:Djangoの1.8 settings.pyのため

SESSION_COOKIE_SECURE = True 
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') 
CSRF_COOKIE_SECURE = True 
+6

nginx.confで 'proxy_set_header X-Forwarded-Protocol $ scheme'を使用します.uwsgiではなく' proxy_pass'を使用する場合。 –

2

あなたがその場合は HTTPS

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

にリダイレクト管理アプリへのすべてのトラフィックを持っている必要があり、すべてでなければなりません動作しません、あなたの実際のnginx設定ビットを投稿できますか?見るべきあなたの実際の設定なしでそれ以上のことを本当に示唆することはできません。

+0

良いアイデアですが、私はそれが違うようになってしまいました。 – justinzane

+0

はPOST要求に対して実際には機能しません。特にAPIコールバックの場合 – Antigluk

0

を更新:

SESSION_COOKIE_SECURE = True 
CSRF_COOKIE_SECURE = True 
SECURE_SSL_REDIRECT = True 
SECURE_REDIRECT_EXEMPT = [r'^(?!admin/).*'] 

そして、あなたの開発効率向上のリグのためにあなたがSECURE_SSL_REDIRECT = Falseを上書きすることもできますあなたの地域の設定で。

関連する問題