Nginx

無效的 HTTP_HOST 標頭。根據 RFC 1034/1035,提供的域名無效

  • January 16, 2021

我的伺服器上出現 Invalid HTTP_HOST 標頭錯誤。我不明白它為什麼會發生以及如何解決它。每次發生後端停止工作,我必須重新啟動伺服器。

任何幫助將不勝感激。

提前致謝!

僅供參考:伺服器是 aws ec2;前端是有角度的,後端是帶有 gunicorn 的 django/drf。Angular 和 DRF 都部署在同一台伺服器上。

錯誤 0。如果我沒有在 nginx.conf 中設置 Host 變數,我會多次出現以下錯誤。無效的 HTTP_HOST 標頭:’/run/gunicorn.sock:’。根據 RFC 1034/1035,提供的域名無效。

如果我在 nginx.conf 中設置主機變數,則會出現以下錯誤。

錯誤 1. proxy_set_header 主機 $http_host;

無效的 HTTP_HOST 標頭:“127.0.0.1:8000,127.0.0.1:8000”。根據 RFC 1034/1035,提供的域名無效。

錯誤 2. proxy_set_header 主機 $host;

無效的 HTTP_HOST 標頭:“127.0.0.1:8000,127.0.0.1”。根據 RFC 1034/1035,提供的域名無效。

錯誤 3. proxy_set_header 主機 $server_name;

HTTP_HOST 標頭無效:“13.234.187.18,13.234.187.18:8000”。根據 RFC 1034/1035,提供的域名無效。

nginx.conf 如下。

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;
   }
}

我在 nginx 網站上找到了以下程式碼。它會解決這個問題嗎? http://nginx.org/en/docs/http/request_processing.html

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

問題是您導致 Host 標頭被包含兩次。

       proxy_set_header Host $host;
       include proxy_params;

查看proxy_params文件會告訴您它已經設置在那裡。再次設置它會導致兩個值用逗號連接。

在該文件中,您將找到包含該文件時將使用的預設標頭。您無需在自己的配置中重複任何這些行。

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;

proxy_set_header Host $host;您可以從配置中刪除您自己的附加資訊。

引用自:https://serverfault.com/questions/1050068