Nginx

如何阻止設置了錯誤 Host 標頭的請求?

  • March 28, 2022

我使用 nginx 來服務我的網站。我想阻止所有帶有與我的站點域不匹配的 HTTP“主機”標頭的請求。

更具體地說,我的 nginx.conf 包含這兩個伺服器塊:

server {
   # Redirect from the old domain to the new domain; also redirect
   # from www.newdomain.com to newdomain.com without the "www"
   server_name www.olddomain.com olddomain.com www.newdomain.com;
   listen 80;
   return 301 $scheme://newdomain.com$request_uri;
}

server {
   server_name newdomain.com localhost;
   listen 80;

   # Actual configuration goes here...
}

我想阻止(即“返回”444 狀態程式碼)主機不是 www.olddomain.com、olddomain.com、www.newdomain.com 或 newdomain.com 的任何流量。我怎樣才能做到這一點?

定義預設伺服器

如果您沒有顯式定義預設伺服器,nginx 將隱式使用 first-found server。所以,只需創建一個伺服器塊來阻止未知主機

server {
 listen 80 default_server;
 return 444;
}

(不,沒有必要添加 server_name - 因為它永遠不會匹配)。

有趣的是,我有時將“-”作為主機標頭,這似乎沒有被@AD7Six 的回答(?)抓住。至少在我的情況下它不起作用。

所以我稍微修改了這個referrer spam blog post entry ,它就像一個魅力:

if ($http_host ^~ (myhostpattern.com) {
   return 405;
}

不知道這是否是最好的解決方案,但它會讓機器人遠離我的網站。

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