【问题标题】:Nginx/Django Admin POST https only仅 Nginx/Django 管理员 POST https
【发布时间】:2012-07-25 17:25:56
【问题描述】:

我在 Centos 6 机器上部署了 Nginx/Gunicorn/Django 服务器,只有 SSL 端口 (443) 对外界可见。因此,除非使用https:// 调用服务器,否则您不会得到任何响应。如果您使用http://domain:443 调用它,您只会收到 400 Bad Request 消息。 443 端口是访问服务器的唯一途径。

我使用 Nginx 来处理我的静态文件(CSS 等),所有其他请求都由 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](我的 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; 
    }

}

【问题讨论】:

    标签: https nginx django-admin gunicorn


    【解决方案1】:

    还没来得及理解这两行的确切作用,但删除它们解决了我的问题:

        proxy_redirect off;
        proxy_set_header Host $host;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 2010-10-12
      • 2020-01-10
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多