我使用 nginx 来服务我的网站。我想阻止所有带有与我的网站域名不匹配的 HTTP“Host”标头的请求。
更具体地说,我的 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 的任何流量。我该怎么做?
答案1
定义默认服务器
如果你没有明确定义默认服务器,nginx 将隐式使用第一个找到的服务器.因此,只需创建用于阻止未知主机的服务器块:
server {
listen 80 default_server;
return 444;
}
(不,没有必要添加 server_name - 因为它永远不会匹配)。
答案2
有趣的是,我有时会将“-”用作主机标头,而@AD7Six 的答案似乎没有捕捉到这一点 (?)。至少在我的情况下,它不起作用。
所以我修改了此引荐垃圾邮件博客文章条目只需一点点,它就会像魔法一样起作用:
if ($http_host ^~ (myhostpattern.com) {
return 405;
}
不知道这是否是最好的解决方案,但它不断地从我的网站上抓取机器人。