2012-07-27 12 views
5

Ich habe einen Nginx/Gunicorn/Django-Server auf einem Centos 6-Rechner mit nur dem für die Außenwelt sichtbaren SSL-Port (443) installiert. Wenn der Server also nicht mit https:// aufgerufen wird, erhalten Sie keine Antwort. Wenn Sie es mit einer http://domain:443 aufrufen, erhalten Sie nur eine Nachricht 400 Bad Request. Port 443 ist die einzige Möglichkeit, den Server zu treffen.Nginx/Django Admin POST https nur

Ich benutze Nginx, um meine statischen Dateien (CSS, etc.) und alle anderen Anfragen werden von Gunicorn, die Django unter http://localhost:8000 ausgeführt wird. So funktioniert das Navigieren zu https://domain.com genauso gut wie Links innerhalb der Admin-Site, aber wenn ich ein Formular im Django-Admin abschicke, ist das https auf der Weiterleitung verloren und ich werde an http://domain.com/ request_uri gesendet, das den Server nicht erreicht. Die POST-Aktion funktioniert trotzdem ordnungsgemäß, und die Datenbank wird aktualisiert.

Meine Konfigurationsdatei ist unten aufgeführt. Der Standort location / Abschnitt ist, wo ich denke, dass die Lösung gefunden werden sollte. Aber es scheint nicht, dass die proxy_set_header X-* Direktiven irgendeine Wirkung haben. Fehle ich ein Modul oder etwas? Ich benutze nginx/1.0.15.

Alles, was ich im Internet finden kann, zeigt auf die X-Forwarded-Protocol https wie es sollte etwas tun, aber ich bekomme keine Veränderung. Ich bin auch nicht in der Lage, das Debugging auf dem Remote-Server arbeiten zu lassen, obwohl mein nächster Schritt möglicherweise lokal kompiliert werden muss, während das Debugging aktiviert ist, um weitere Hinweise zu erhalten. Der letzte Ausweg ist, Port 80 freizulegen und alles umzuleiten ... aber das erfordert ein wenig Papierkram.

[http://pastebin.com/Rcg3p6vQ](My nginx konfigurieren Argumente)

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

} 

Antwort

2

Wurden noch keine Zeit gehabt, genau zu verstehen, was diese beiden Linien zu tun, aber das Entfernen sie meine Probleme zu lösen:

proxy_redirect off; 
    proxy_set_header Host $host;