Представим ситуацию: у вас статичный ip и вы много и подолгу занимаетесь редактированием сайта. При этом, вам ещё нужно мониторить, периодически, логи на наличие ошибок в запросах, или на сканы уязвимостей. А наличие большого количество записей с вашим IP затрудняет просмотр логов.
При помощи условной записи, которая доступна в nginx, начиная с версии 1.7.0, мы можем проверять ip посетителя и не записывать его в лог-файлы. Действительно, зачем это делать, если в логгировании своего айпи нет необходимости?
Чтобы добавить такое исключение, нужно создать условную запись на основе map_module. Результат вычисления условной записи не будет записываться в лог, если будет равен 0. Правило будет выглядеть так:
map $remote_addr $loggable { "127.0.0.1" 0; "::1" 0; default 1; }
То есть, по-умолчанию результат равен 1, а для указанных ip — 0, и они не будут записаны в лог. Поддерживаются версии протокола 4 и 6. Обратите внимание, здесь первая переменная — это адрес подключившегося клиента. А вторую переменную нужно записать в параметрах access лога.
access_log /var/log/nginx/access.log combined if=$loggable;
Блок map можно прописать как на уровне http
конфига nginx, так и на уровне server
.
Исключение других данных из логов
Отключение логгирования конкретных ip — это только один пример из множества. Можно использовать различные переменные из стандартных.
Давайте отключим, в качестве примера, запись в лог страницы error.html. Для этого создадим такой блок:
map $request_uri $loggable { ~*error.html 0; default 1; }
И пропишем, как выше, параметр if в качестве аргумента для параметра access_log. После перезапуска nginx все запросы error.html не будут записаны. Включая вариации типа error.html?q=search
. Для точного совпадения нужно прописать другое регулярное выражение.