我们已阻止一些恶意机器人通过 NGINX 中的“拒绝”指令不断尝试访问我们的网站。我们无法在防火墙处阻止它,因为我们使用无法从云提供商访问的负载均衡器。
此指令运行正常,但我们的 nginx error.log 文件被这些请求淹没。我们已轮换这些请求,但这对我们来说很糟糕,因为请求太多,我们实际上无法使用错误日志来查看是否存在我们应该注意的真正错误。
有几个问题:
- 我们如何防止 nginx 将这些错误发送到 error.log。
- 为什么 nginx 认为这是一个错误?如果您指定了拒绝指令并且 IP 被拒绝,从 http 角度来看,这是一个成功的 403 响应,根本不应被视为错误(imo)。
答案1
添加
access_log /dev/null;
error_log /dev/null;
到deny
指令级别。这应该可以阻止这些条目。
答案2
在这种情况下,更好的解决方案将使用地理封锁来拒绝如下请求:
geo $blocked {
default 0;
1.1.1.1/32 1;
}
...
server {
if ($blocked) {
return 444;
}
}
答案3
- 根据您的配置,您可以在上下文中添加指令(错误日志)
示例与access_log
“error_log off;”相同
location = /robots.txt {
log_not_found off;
access_log off;
}
如果不能,请使用grep
命令(或类似的)?!
- 不知道。也许是层的问题。IP 地址被层网络阻止了?!