Domanda

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 https://, non riceverai alcuna risposta. Se lo chiami con un http://domain:443, riceverai solo un messaggio di richiesta di 400 cattive. Port 443 è l'unico modo per colpire il server.

Sto usando Nginx per servire i miei file statici (CSS, ecc.) E tutte le altre richieste sono gestite da Gunicorn, che esegue Django a http://localhost:8000. Quindi, navigando per generarecodicitagcode funziona bene, poiché i collegamenti all'interno del sito di amministrazione, ma quando presenterò un modulo nell'amministratore Django, il HTTPS viene perso sul reindirizzamento e sono inviato a https://domain.comrequest_uri che non riesce a raggiungere il server. L'azione post funziona correttamente anche così e il database viene aggiornato.

Il mio file di configurazione è elencato di seguito. La sezione Ubicazione http://domain.com/ è dove mi sento come se la soluzione dovrebbe essere trovata. Ma non sembra che le direttive location / abbiano qualche effetto. Mi manca un modulo o qualcosa del genere? Sto eseguendo nginx / 1.0.15.

Tutto ciò che riesco a trovare sui punti Internet per il proxy_set_header X-* come dovrebbe fare qualcosa, ma non ho alcun cambiamento. Sono anche in grado di ottenere il debug di lavoro sul server remoto, anche se il mio prossimo passo potrebbe dover compilare localmente con il debug abilitato per ottenere altri indizi. L'ultima risorsa è di esporre il porto 80 e reindirizzare tutto ... ma ciò richiede alcuni documenti.

[http://pastebin.com/rcg3p6vq] (i miei argomenti di configurazione nginx)

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; 
    }

}
.

È stato utile?

Soluzione

Non ho ancora avuto il tempo di capire esattamente cosa fanno queste due linee, ma rimuovendole risolti i miei problemi:

    proxy_redirect off;
    proxy_set_header Host $host;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top