Отключить журналирование запросов с определенных IP-адресов в apache2

Вопрос или проблема

Я хочу прекратить регистрацию обращений с двух моих локальных IP-адресов, вот что я добавил в apache2.conf:

...
<VirtualHost *:80>
  SetEnvIf Remote_Addr "192.168.0.1" dontlog
  SetEnvIf Remote_Addr "192.168.0.192" dontlog
  CustomLog /var/log/apache2/access.log combined env=!dontlog
  ....
</VirtualHost>

Обращения с этих двух IP-адресов все еще отображаются в моем access.log:

192.168.0.192 - - [31/Jan/2019:21:52:10 +0100] "GET /favicon.ico HTTP/1.1" 200 5859 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

На этом сайте много раз спрашивали, как отключить регистрацию для определенных IP-адресов, но на все вопросы более или менее ответили подходом выше, но я все еще не могу понять, в чем дело. Как мне это заставить работать или где я могу увидеть, в чем ошибка? error.log не показывает никаких синтаксических ошибок, только обычные логи, которые он создает при запуске.

Да, я перезапустил apache после изменения файла, и он работает:

Active: active (running) since Thu 2019-01-31 21:52:07 CET; 12min ago


Редактирование: apache2ctl -M показывает, что setenvif_module (shared) включен.


Редактирование 2: Я не знаю, имеет ли это значение, но в моем apache2.conf существует следующая строка:

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Я проверил ваш код. Я попытался предотвратить регистрацию IP-адреса в файл лога в своей конфигурации apache. Это работает. Попробуйте снова этот код. Возможно, вы пытались вставить код в <VirtualHost *:80>.

Следуйте этому шагу только для веб-сервера Apache

Скопируйте и вставьте весь ваш код из <VirtualHost *:80>. Затем переименуйте его в <VirtualHost *:443> или другой порт, который указан в конфигурации сервера apache или активный порт, который вы использовали на сайте.

Пример формата

<VirtualHost *:443>
   SetEnvIf Request_URI ~*Filename1..php DisableLogging
   SetEnvIf Request_URI \Filename2.php$ DisableLogging
   SetEnvIf Request_URI \.(css|js|jpg|png|gif|bmp|webp|ico)$ DisableLogging
   CustomLog "/filename-access_log" combined env=!DisableLogging
</VirtualHost>

Ответ или решение

Для отключения логирования запросов от определённых IP-адресов в Apache2 необходимо внести корректировки в конфигурацию вашего сервера. Давайте подробно рассмотрим, как это сделать, основываясь на вашей ситуации.

Пошаговая инструкция по отключению логирования для IP-адресов

  1. Откройте файл конфигурации Apache: Как правило, это может быть /etc/apache2/apache2.conf или /etc/apache2/sites-available/000-default.conf (если вы используете виртуальные хосты).

  2. Настройте виртуальный хост: В секции <VirtualHost *:80> добавьте необходимые команды, чтобы отключить логирование для указанных IP.

    Пример конфигурации:

    <VirtualHost *:80>
       SetEnvIf Remote_Addr "192.168.0.1" dontlog
       SetEnvIf Remote_Addr "192.168.0.192" dontlog
       CustomLog /var/log/apache2/access.log combined env=!dontlog
       # ... другие директивы
    </VirtualHost>
    • SetEnvIf Remote_Addr "IP-адрес" dontlog: Эта директива устанавливает переменную окружения dontlog для указанных IP-адресов.
    • CustomLog /var/log/apache2/access.log combined env=!dontlog: Эта директива настраивает логирование и исключает IP-адреса с установленной переменной dontlog.
  3. Перезапустите Apache: После внесения изменений необходимо перезапустить сервер, чтобы применить новые настройки. Используйте следующую команду:

    sudo systemctl restart apache2
  4. Проверьте настройки: Убедитесь, что ваш сервер запущен, командой:

    systemctl status apache2
  5. Настройка формата логов: Если в конфигурации уже указаны другие форматы логов, убедитесь, что у вас нет конфликта с настройками LogFormat. Ваша запись может выглядеть так:

    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

    Это важно, чтобы избежать путаницы при логировании.

Общие рекомендации

  • Проверка модулей: Убедитесь, что модуль setenvif_module включен в Apache, как вы уже отметили. Это можно сделать с помощью команды:

    apache2ctl -M | grep setenvif
  • Логи и отладка: Если изменения не вступают в силу, проверьте, нет ли других конфигурационных файлов, которые могут переопределять настройки (.htaccess файлы или другие блоки <VirtualHost>). Также посмотрите на error.log, чтобы убедиться, что не возникает других ошибок.

  • Групповые IP-адреса: Если вы планируете блокировать группы IP (например, подсеть), можно сделать это следующим образом:

    SetEnvIf Remote_Addr "^192\.168\.0\." dontlog

Это позволит блокировать все IP-адреса с префиксом 192.168.0.

Следуя вышеуказанным шагам, вы сможете эффективно отключить логирование запросов от конкретных IP-адресов на вашем сервере Apache2. Если вы столкнетесь с проблемами, проверьте все секции конфигураций на наличие возможных конфликтов.

Оцените материал
Добавить комментарий

Капча загружается...