2012-07-27 18 views
5

Ho un server Nginx/Gunicorn/Django distribuito su una macchina Centos 6 con solo la porta SSL (443) visibile al mondo esterno. Quindi, a meno che il server non venga chiamato con lo https://, non si otterrà alcuna risposta. Se lo chiami con un http://domain:443, riceverai semplicemente un messaggio 400 Richiesta non valida. La porta 443 è l'unico modo per colpire il server.Nginx/Django Admin POST https solo

Sto utilizzando Nginx per servire i miei file statici (CSS, ecc.) E tutte le altre richieste sono gestite da Gunicorn, che sta eseguendo Django allo http://localhost:8000. Quindi, la navigazione su https://domain.com funziona bene, così come i collegamenti all'interno del sito admin, ma quando invio un modulo nell'amministratore di Django, l'https viene perso sul reindirizzamento e inviato a http://domain.com/ request_uri che non riesce a raggiungere il server. L'azione POST funziona correttamente anche così e il database viene aggiornato.

Il file di configurazione è elencato di seguito. La sezione di posizione location / è dove mi sento come la soluzione dovrebbe essere trovata. Ma non sembra che le direttive proxy_set_header X-* abbiano alcun effetto. Mi manca un modulo o qualcosa del genere? Sto eseguendo nginx/1.0.15.

Tutto quello che riesco a trovare sui punti internet per il X-Forwarded-Protocol https come dovrebbe fare qualcosa, ma non ottengo alcun cambiamento. Non riesco nemmeno a far funzionare il debug sul server remoto, anche se il mio prossimo passo potrebbe dover essere compilato localmente con il debug abilitato per ottenere ulteriori indizi. L'ultima risorsa è quella di esporre il porto 80 e reindirizzare tutto ... ma ciò richiede alcune pratiche burocratiche.

[http://pastebin.com/Rcg3p6vQ](My nginx configurare argomenti)

server { 
    listen  443 ssl; 

    ssl on; 
    ssl_certificate /path/to/cert.crt; 
    ssl_certificate_key /path/to/key.key; 
    ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 

    server_name example.com; 

    root /home/gunicorn/project/app; 
    access_log /home/gunicorn/logs/access.log; 
    error_log /home/gunicorn/logs/error.log debug; 

    location /static/ { 
     autoindex on; 
     root /home/gunicorn; 
    } 

    location/{ 
     proxy_pass http://localhost:8000/; 
     proxy_redirect off; 
     proxy_set_header Host $host; 
     proxy_set_header X-Scheme $scheme; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Protocol https; 
    } 

} 

risposta

2

non ho avuto ancora tempo di capire esattamente ciò che queste due righe fanno, ma la loro rimozione ha risolto i miei problemi:

proxy_redirect off; 
    proxy_set_header Host $host;