错误:无效的 HTTP_HOST 标头:'/webapps/../gunicorn.sock'

Posted

技术标签:

【中文标题】错误:无效的 HTTP_HOST 标头:\'/webapps/../gunicorn.sock\'【英文标题】:ERROR: Invalid HTTP_HOST header: '/webapps/../gunicorn.sock'错误:无效的 HTTP_HOST 标头:'/webapps/../gunicorn.sock' 【发布时间】:2014-03-25 02:40:33 【问题描述】:

昨晚我部署了我的 Django 应用程序后,我收到了大量奇怪的电子邮件:

ERROR: Invalid HTTP_HOST header: '/webapps/example_com/run/gunicorn.sock

我确定这与以下 nginx 配置有某种关系:

upstream example_app_server 
  server unix:/webapps/example_com/run/gunicorn.sock fail_timeout=0;


server 

    listen   80;
    server_name example.com;

    client_max_body_size 4G;

    access_log /webapps/example_com/logs/nginx-access.log;
    error_log /webapps/example_com/logs/nginx-error.log;


    location / 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header Host $http_host;

        proxy_redirect off;

        if (!-f $request_filename) 
            proxy_pass http://example_app_server;
            break;
        
    

【问题讨论】:

【参考方案1】:

This person 在同一篇文章的基础上进一步解释了正在发生的事情。这是他/她的解释:

...当向服务器发出请求并且 HTTP 主机为空时,nginx 将 HTTP 主机设置为 gunicorn sock。

我可以使用 curl 生成此错误:

curl -H "HOST:" MY_DOMAIN_NAME -0 -v

这会在没有 HTTP 主机的情况下发送请求。 -0 使 curl 使用 HTTP 版本 1.0。如果不设置,请求将使用 HTTP 1.1 版本,这会导致请求立即被拒绝,不会产生错误。

解决方案是将 $http_host 替换为 $host(正如 *** 上所指出的)。当 HTTP 主机丢失时,$host 将采用“server_name”指令的值。这是一个有效的域名,应该使用它。

【讨论】:

【参考方案2】:

我在 django 错误报告中找到了我的问题的答案。

    proxy_set_header Host $http_host;

必须替换为:

    proxy_set_header Host $host;

为了让 nginx 传递正确的标头而不是 gunicorn 套接字,请求的页面在 django 警报中。

【讨论】:

能否请您链接对错误报告的引用以及关于为什么第一个导致问题的任何可能的额外信息?我一直在多个网站上使用第一种方法,从来没有遇到过问题。然而,我最近的一个网站受到了影响。 @Andre,我通过search.aol.com/aol/… 进行了搜索。还有code.djangoproject.com/ticket/19867好像是那个,注意最后一条评论。 谢谢@flyingfoxlee,我将在下一次迭代中对此进行测试。 :)

以上是关于错误:无效的 HTTP_HOST 标头:'/webapps/../gunicorn.sock'的主要内容,如果未能解决你的问题,请参考以下文章

Django 错误:无效的 HTTP_HOST 标头:u'/run/myprojectname/gunicorn.sock:'

无效的http_host标头

将 django 站点从 http 升级到 https 后,我不断收到“无效的 HTTP_HOST 标头”错误电子邮件

Django 的 SuspiciousOperation 无效的 HTTP_HOST 标头

如何禁用 Django 的无效 HTTP_HOST 错误?

python 无效的HTTP_Host标头