Nginx禁用某些用户代理的日志记录

时间:2014-01-28 01:42:46

标签: nginx user-agent

基本上,我正在尝试删除搜索引擎抓取工具,例如Google,Bing,以及我的访问日志中没有的内容。它们确实会随着时间的推移而逐渐增加,最终会在日志中添加数十万个无用的访问日志条目,如果您不得不搜索它们,这尤其令人痛苦。我遇到的麻烦是,在我的块中,我正在定义访问日志,因此Nginx正在查看它并忽略我在位置/块中定义的第二个。如果我注释掉我的网站访问日志(而不是爬虫块),那么它可以正常工作。这是配置:

server {
listen 80;
server_name example.com;
access_log  /home/domains/example.com/logs/access;
error_log /home/domains/example.com/logs/error;
root /home/domains/example.com/forums;
location / {
        index index.html index.htm;
        if ($http_user_agent ~* ("googlebot") ) {
        access_log off;
        }
}

我已经删除了所有内容,除了发布时(php包括,什么不包括),尽管我已经检查过没有任何东西干扰它通过评论除了上面的所有内容。总而言之,我在我的虚拟块中定义了一个日志来记录所有流量(我为每个块定义了它,使它更整洁,什么不是。我正在尝试禁用某些用户代理的日志记录,除非我禁用该站点的主日志,否则它将继续记录我告诉它的不是用户代理。

我已经在这里待了几个小时,非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

您不应在if - if is evil

中使用nginx语句

使用conditional logging

http {

     map $http_user_agent $excluded_ua {
         ~Googlebot  0;
         default     1;
     }
     .......
}

server {

     access_log  /home/domains/example.com/logs/access combined if=$excluded_ua;

}

但是要小心排除googlebot因为一些滥用机器人伪装自己。

答案 1 :(得分:0)

好吧,实际上正则表达式("googlebot")会将用户代理双引号匹配,显然不是你想要的。如果你愿意,可以放下括号和引号,你应该没问题。

答案 2 :(得分:0)

您需要添加返回200;在access_log off之后;

所以它看起来像这样:

location / {
    if ($http_user_agent ~* "(googlebot)" ) {
        access_log off;
        return 200;
    }
}