防止 Apache2 记录 robots 和图像请求

防止 Apache2 记录 robots 和图像请求

我运营一个高流量网站,需要稍微控制一下 Apache2 访问日志。据我所知,一种方法是限制 Apache2 记录的内容类型。最明显的选择是限制以下三种类型的请求:

  1. 机器人发出的请求
  2. 对图像、js 文件和 css 的请求(我只对页面请求感兴趣。而不是所有资产)
  3. localhost(Web 服务器本身)发出的请求

我正在运行 Apache2 mod设置但当我查看访问日志时,似乎我的任何更改都不会生效tail -f。我还运行 cronolog(如果这很重要)作为日志轮转器。以下是我的 VirtualHost conf 中的内容:

# LogLevel warn

# Variable is_local_referrer = requests made by the server itself
SetEnvIfNoCase Referer "^http://*.mysite.com/" is_local_referrer

# Variable dont_log = standard file requests
SetEnvIf Request_URI ".(jpg|jpeg|png|css|gif|ico|js)$" dont_log

# Variable is_a_robot = user agent is a robot
SetEnvIfNoCase User-Agent Robot is_a_robot

ErrorLog "|/usr/bin/cronolog /home/me/public/mysite.com/log/error_%Y_%m.log"
CustomLog "|/usr/bin/cronolog /home/me/public/mysite.com/log/access_%Y_%m.log" combined env=!is_local_referrer|!dont_log|!is_a_robot

再次,当我 tail /usr/bin/cronolog /home/me/public/mysite.com/log/access_X_X.log 时,Apache2 正在记录每个请求。

答案1

我不相信(并且文档也没有表明)您可以创建类似的 CustomLog 语句env=!is_local_referrer|!dont_log|!is_a_robot,即跨越多个环境变量。

您可以让所有 SetEnvIf 语句设置“dont_log”,然后只需说env=!dont_log,或者您可以让其他 SetEnvIf 语句对其他环境变量进行操作以设置将在 CustomLog 指令中使用的其他变量,以防您is_local_referrer在其他地方使用,例如:

SetEnvIfNoCase Referer "^http://*.mysite.com/" is_local_referrer
SetEnvIf Request_URI ".(jpg|jpeg|png|css|gif|ico|js)$" is_static_asset
SetEnvIfNoCase User-Agent Robot is_a_robot

SetEnvIf is_local_referrer .* dont_log
SetEnvIf is_static_asset .* dont_log
SetEnvIf is_a_robot .* dont_log

“.*” 是为了满足所示的语法要求http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif可能还有更好的方法,因为我还没有测试过这个配置。也许你可以设置,例如,is_local_referrer=1然后1在“dont_log”语句中打开正则表达式。

相关内容