2012-07-27 13 views
5

Mam serwer Nginx/Gunicorn/Django wdrożony na komputerze Centos 6 z widocznym tylko światem zewnętrznym portem SSL (443). Więc jeśli serwer nie zostanie wywołany z https://, nie otrzymasz żadnej odpowiedzi. Jeśli zadzwonisz pod numer http://domain:443, otrzymasz jedynie 400 wiadomość o złym żądaniu. Port 443 to jedyny sposób na trafienie na serwer.Nginx/Django Admin POST https only

Używam Nginx do udostępniania moich plików statycznych (CSS itp.), A wszystkie inne żądania są obsługiwane przez Gunicorn, który działa pod Django pod numerem http://localhost:8000. Tak więc, nawigacja do https://domain.com działa dobrze, podobnie jak linki w witrynie administratora, ale po przesłaniu formularza do administratora Django, https jest tracone w przekierowaniu i jestem wysyłany do http://domain.com/ request_uri, który nie dociera do serwera. Akcja POST działa poprawnie, a baza danych jest aktualizowana.

Mój plik konfiguracyjny jest wymieniony poniżej. Sekcja o lokalizacji location / to miejsce, w którym mam ochotę znaleźć rozwiązanie. Ale nie wydaje się, aby dyrektywy miały jakiś wpływ. Czy brakuje mi modułu lub czegoś? Używam nginx/1.0.15.

Wszystko, co mogę znaleźć w internecie, wskazuje na X-Forwarded-Protocol https, tak jak powinno coś zrobić, ale nie otrzymuję żadnych zmian. Nie mogę też uzyskać debugowania działającego na serwerze zdalnym, ale moim następnym krokiem może być kompilowanie lokalnie z włączonym debugowaniem, aby uzyskać więcej wskazówek. Ostatnim wyjściem jest ujawnienie portu 80 i przekierowanie wszystkiego ... ale to wymaga pewnych formalności.

[http://pastebin.com/Rcg3p6vQ](My nginx skonfigurować argumenty)

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

} 

Odpowiedz

2

Nie miałem jeszcze czasu, aby zrozumieć dokładnie, co te dwie linie, ale usuwając je rozwiązać mój problem:

proxy_redirect off; 
    proxy_set_header Host $host;