我有一个Nginx/Gunicorn/Django服务器部署在一台Centos6机器上,只有外部世界可见的SSL端口(443)。所以,除非服务器被调用与 https://, ,你不会得到任何回应。如果你用一个 http://domain:443, ,你只会得到一个400错误的请求消息。端口443是命中服务器的唯一方法。

我正在使用Nginx来服务我的静态文件(CSS等。)而所有其他请求都由Gunicorn处理,Gunicorn正在运行Django http://localhost:8000.因此,导航到 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](我的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; 
    }

}
有帮助吗?

解决方案

还没有时间确切了解这两条线的作用,但删除它们解决了我的问题:

    proxy_redirect off;
    proxy_set_header Host $host;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top