nginx:停止搜索引擎机器人的错误日志

nginx:停止搜索引擎机器人的错误日志

我有一台装有 nginx 1.6.2 的 centos 7 服务器,当搜索引擎的机器人在我的网站上出现 404 错误时,我想停止错误日志。这样,错误日志就会变得干净,只包含“真实错误”。

这怎么可能 ?

我已经在我的虚拟主机中尝试过这个,但是没有用

    server {
       ...
       error_log /var/log/nginx/errors.log;


       if ($http_user_agent ~* (googlebot|yahoo|bingbot)) {
          error_log /dev/null crit;
       }

       ...    
  }

结果,nginx 服务重启失败:

nginx:[emerg] /etc/nginx/conf.d/mysite.conf:18 中不允许使用“error_log”指令

有什么想法吗?提前谢谢您!

答案1

正如所述nginx 文档,方向error_log不能在if上下文中使用。

句法:error_log 文件 | stderr | syslog:服务器=地址[,参数=值] [调试 | 信息 | 通知 | 警告 | 错误 | 暴击 | 警报 | 紧急];

默认:error_log 日志/error.log 错误;

语境:主要,http,服务器,位置


对于过滤error_log条目,您不能只依赖 nginx。一些想法是使用 syslog 来过滤日志行。Nginx 版本 1.7.1 及以上支持记录到syslog(当然必须更新nginx版本)。

每个 syslog 软件都有不同的过滤语法。例如:

当然,您也可以使用它grep -v来手动从您的日志中过滤机器人:)。

答案2

最后我找到了一个折中的解决方案:

server {
  ...
  error_log /var/log/nginx/errors.log;

  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    try_files $uri =410;
    access_log off;
    log_not_found  off;
   }
}

此代码避免对不重要的文件进行错误记录。

感谢您的帮助

相关内容