2012-07-27 46 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;