Назад | Перейти на главную страницу

Запретить Apache2 регистрировать роботов и запросы изображений

У меня сайт с высоким трафиком, и мне нужно немного поработать в журналах доступа Apache2. Я читал, что один из способов сделать это - ограничить типы журналов Apache2. Очевидным выбором было бы ограничить 3 типа запросов:

  1. Запросы ботов
  2. Запросы изображений, файлов js и css (меня интересует только запрос страницы, а не ВСЕ ресурсы)
  3. Запросы, сделанные localhost (сам веб-сервер)

Я использую мод Apache2 setinf но не похоже, что какие-либо из моих изменений повлияют, когда я tail -f мой журнал доступа. Я также использую cronolog (если это важно) в качестве ротатора журналов. Вот что находится в моей конфигурации VirtualHost:

# 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

Опять же, когда я просматриваю / usr / bin / cronolog /home/me/public/mysite.com/log/access_X_X.log, Apache2 регистрирует каждый запрос.

Я не верю (и документация не предлагает), что вы можете сделать оператор CustomLog, например env=!is_local_referrer|!dont_log|!is_a_robot, то есть через несколько переменных среды.

Вы можете установить для всех статусов SetEnvIf "dont_log", а затем просто сказать env=!dont_log, или вы можете использовать другие операторы SetEnvIf для работы с другими переменными env, чтобы установить какую-либо другую переменную, которая будет использоваться в директиве 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".