Nginx – Invalid HTTP_HOST header. The domain name provided is not valid according to RFC 1034/1035

djangogunicornnginx

I am getting Invalid HTTP_HOST header error on my server. I don't understand why it's happening and how to fix it. Everytime it happens backend stops working and I have to restart the server.

Any help will be appreciated.

Thanks in advance!

FYI :
Server is aws ec2; frontend is angular and backend is django/drf with gunicorn.
Angular and DRF are both deployed on the same server.

Error 0.
If I don't set the Host variable in nginx.conf, I get below error many times.
Invalid HTTP_HOST header: '/run/gunicorn.sock:'. The domain name provided is not valid according to RFC 1034/1035.

If I set the Host variable in nginx.conf, I get below errors.

Error 1.
proxy_set_header Host $http_host;

Invalid HTTP_HOST header: '127.0.0.1:8000,127.0.0.1:8000'. The domain name provided is not valid according to RFC 1034/1035.

Error 2.
proxy_set_header Host $host;

Invalid HTTP_HOST header: '127.0.0.1:8000,127.0.0.1'. The domain name provided is not valid according to RFC 1034/1035.

Error 3.
proxy_set_header Host $server_name;

Invalid HTTP_HOST header: '13.234.187.18,13.234.187.18:8000'. The domain name provided is not valid according to RFC 1034/1035.

nginx.conf is as below.

server {
    listen 8000;
    server_name 13.234.187.18;

    location / {
        proxy_set_header Host $host;
        include proxy_params;

        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

I found below code on the nginx website. Will it solve this problem?
http://nginx.org/en/docs/http/request_processing.html

server {
    listen      80;
    server_name "";
    return      444;
}

Best Answer

The problem is that you have caused the Host header to be included twice.

        proxy_set_header Host $host;
        include proxy_params;

Looking at the proxy_params file will show you that it was already set there. Setting it again causes the two values to be joined with a comma.

Inside that file you will find preset headers that will be used when you include that file. You do not need to repeat any of those lines in your own configuration.

ubuntu@vmtest-ubuntu2004:~$ cat /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

You can remove your own additional proxy_set_header Host $host; from the configuration.

Related Topic