2012-08-13 4 views
8

Ho django in esecuzione in uwsgi dietro nginx. Quando provo ad accedere a https://site/admin/ ottengo la schermata di accesso prevista. L'accesso tramite il modulo sembra avere successo, tuttavia, semplicemente ritorno alla schermata di accesso. Firebug mostra un reindirizzamento all'url normale http://site/admin/ che viene quindi redirectec da nginx all'URL https.Accesso a Django Admin su HTTPS dietro Nginx

Help! Sono confuso su come forzare l'app di amministrazione a utilizzare solo gli URL https.

Nota questo sembra essere un relativo, domanda senza risposta: https://example.com/admin redirects to https://admin in Django Nginx and gunicorn

risposta

9

Aggiungendo quanto segue a nginx.conf risolto il problema per me.

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

Insieme aggiungendo quanto segue al settings.py:

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

Usa 'proxy_set_header X-Forwarded-Protocol $ scheme' in nginx.conf se si utilizza' proxy_pass' e non uwsgi. –

2

seguente dovrebbe essere tutto il necessario per avere tutto il traffico per l'applicazione di amministrazione reindirizzato a https

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

Se questo non funziona, puoi pubblicare i tuoi attuali bit di configurazione nginx? Non posso davvero suggerire di più che senza la tua vera configurazione da guardare.

+0

Buona idea, anche se ho finito per farlo funzionare in modo diverso. – justinzane

+0

non funziona davvero per le richieste POST. soprattutto per eventuali callback API. – Antigluk

0

Aggiornamento per Django 1.8 settings.py:

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

E per il vostro impianto di perforazione sviluppo si potrebbe voler sovrascrivere SECURE_SSL_REDIRECT = False nelle impostazioni locali.