无效的HTTP_HOST标头:'localhost:90,localhost:90'.根据RFC 1034/1035,提供的域名无效

akh*_*wam 5 django nginx gunicorn

我正在尝试与Gunicorn一起配置nginx用于Django项目.nginx给我以下错误:

DisallowedHost at /
Invalid HTTP_HOST header: 'localhost:90,localhost:90'. The domain name provided is not valid according to RFC 1034/1035.
Run Code Online (Sandbox Code Playgroud)

这是我的nginx配置

    server {

        listen 90;
        listen [::]:90;

        server_name xxxx;

        location = /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
            root /home/user/djangopro/djangoapp;
        }

        location / {
            include proxy_params;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_buffering off;
            proxy_redirect off;

            proxy_pass http://localhost:8200/;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Gunicorn正在为该网站提供服务localhost:8200.谁能告诉我导致错误的原因是什么?

Joh*_*son 7

我遇到了同样的错误。我猜你可能是从 Flask 转换到 Django 的?如果您proxy_set_header Host $http_host;从配置中删除该行,它应该可以工作(它修复了我的错误)。我认为这样做是将请求的 ip 地址和代理 ip 地址堆叠在一起,而 Django 只想要一个 ip 地址,而不是一个列表。请参阅此 Django 票证:https : //code.djangoproject.com/ticket/28028

我猜你已经弄明白了(因为已经几个月了),但我仍在回答以节省我刚刚用谷歌搜索的 2 个小时:)

编辑:我想澄清一下,问题来自于同时拥有include proxy_params;proxy_set_header Host $http_host;设置。默认proxy_params已经proxy_set_header Host $http_host;包含了,所以它会设置主机两次,因此是两个主机的列表。如果您使用的是 Ubuntu,请查看该proxy_params文件/etc/nginx/proxy_params(在其他机器上将是类似的路径)。