2012-07-27 67 views
5

我有一臺Nginx/Gunicorn/Django服務器部署在Centos 6機器上,只有SSL端口(443)可以被外部世界看到。因此,除非使用https://調用服務器,否則您將不會收到任何迴應。如果您使用http://domain:443調用它,則只會收到400個錯誤的請求消息。端口443是擊中服務器的唯一方法。我使用Nginx的爲我的靜態文件(CSS等)和所有其他請求Nginx/Django Admin POST https只有

由Gunicorn,這是在http://localhost:8000運行Django的處理。所以,導航到https://domain.com工作得很好,就像管理站點中的鏈接一樣,但是當我在Django管理員中提交表單時,HTTPS在重定向時丟失了,並且我發送到http://domain.com/ request_uri,無法到達服務器。即使如此,POST操作也能正常工作,並且數據庫已更新。

我的配置文件列在下面。位置location /部分是我覺得應該找到解決方案的地方。但它似乎並不像proxy_set_header X-*指令有任何影響。我錯過了一個模塊什麼的?我正在運行nginx/1.0.15。

我可以在互聯網上找到的所有東西都指向X-Forwarded-Protocol https,因爲它應該做些什麼,但我沒有任何改變。我也無法在遠程服務器上進行調試,儘管我的下一步可能不得不在本地進行編譯並啓用調試以獲取更多線索。最後的手段是公開80端口並重定向所有內容......但這需要一些文書工作。

[http://pastebin.com/Rcg3p6vQ](My 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; 
    } 

} 

回答

2

還沒來得及還沒有確切瞭解這兩條線做的,但刪除它們解決了我的問題:

proxy_redirect off; 
    proxy_set_header Host $host;