Вопрос или проблема
Я хочу прекратить регистрацию обращений с двух моих локальных 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-адресов
-
Откройте файл конфигурации Apache: Как правило, это может быть
/etc/apache2/apache2.conf
или/etc/apache2/sites-available/000-default.conf
(если вы используете виртуальные хосты). -
Настройте виртуальный хост: В секции
<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
.
-
Перезапустите Apache: После внесения изменений необходимо перезапустить сервер, чтобы применить новые настройки. Используйте следующую команду:
sudo systemctl restart apache2
-
Проверьте настройки: Убедитесь, что ваш сервер запущен, командой:
systemctl status apache2
-
Настройка формата логов: Если в конфигурации уже указаны другие форматы логов, убедитесь, что у вас нет конфликта с настройками
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. Если вы столкнетесь с проблемами, проверьте все секции конфигураций на наличие возможных конфликтов.