禁用“规则禁止”的 Nginx 日志记录

禁用“规则禁止”的 Nginx 日志记录

在我的 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 (连接关闭且无响应) 关闭连接并且不记录任何错误。

相关内容