在我的 Nginx 配置中,我设置了一些 IP 块,以抵御垃圾邮件发送者和机器人。
这非常有效,但结果是,我的错误日志很快就被如下错误消息填满:
2015/12/16 00:56:28 [错误] 27748#0: *120462 规则禁止访问,客户端:167.114.xxx.xxx,服务器:bla bla ....
现在我不想完全禁用错误日志记录,因为我想在出现问题时找出问题所在。我只想禁用这些“规则禁止”消息的日志记录。
知道如何做到这一点吗?
答案1
如上所述这里,使用条件日志记录(access_log
指示):
启用条件日志记录
条件日志记录允许从访问日志中排除不重要的日志条目。在 NGINX 中,条件日志记录由 access_log 指令的 if 参数启用。
例如,它可以排除 HTTP 状态代码为 2XX(成功)和 3XX(重定向)的请求:
map $status $loggable { ~^[23] 0; default 1; } access_log /path/to/access.log combined if=$loggable;
编辑:
正如 @zsero 在评论中所述,条件日志记录仅支持access_log
- 而不是error_log
指示。
答案2
有更好的解决方案上游建议 - 使用地理封锁来拒绝如下请求:
geo $blocked {
default 0;
1.1.1.1/32 1;
}
...
server {
if ($blocked) {
return 444;
}
}
答案3
我使用这个 nginx 配置来忽略对隐藏文件的恶意请求:
location ~ /\.(?!well-known).* {
return 444;
}
返回 444 (连接关闭且无响应) 关闭连接并且不记录任何错误。