Nginx
如何阻止設置了錯誤 Host 標頭的請求?
我使用 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; }
不知道這是否是最好的解決方案,但它會讓機器人遠離我的網站。