Отключить ведение журнала Nginx для «запрещенного правилом»

В моей конфигурации Nginx у меня есть несколько IP-блоков, чтобы бороться со спамерами и ботами.

Это очень эффективно, но в результате мои журналы ошибок очень быстро заполняются такими сообщениями об ошибках, как эти:

2015/12/16 00:56:28 [ошибка] 27748 # 0: * 120462 доступ запрещен по правилу, для борьбы со спамерами и ботами. Это очень эффективно, но в результате мои журналы ошибок очень быстро заполняются сообщениями об ошибках вроде этих: ...

В моей конфигурации Nginx у меня есть несколько IP-блоков, чтобы бороться со спамерами и ботами.

Это очень эффективно, но в результате мои журналы ошибок очень быстро заполняются такими сообщениями об ошибках, как эти:

2015/12/16 00:56:28 [ошибка] 27748 # 0: * 120462 доступ запрещен по правилу, для борьбы со спамерами и ботами. Это очень эффективно, но в результате мои журналы ошибок очень быстро заполняются сообщениями об ошибках вроде этих: ...

В моей конфигурации Nginx у меня есть несколько IP-блоков, чтобы бороться со спамерами и ботами.

Это очень эффективно, но в результате мои журналы ошибок очень быстро заполняются такими сообщениями об ошибках, как эти:

2015/12/16 00:56:28 [ошибка] 27748 # 0: * 120462 доступ запрещен по правилу, клиент: 167.114.xxx.xxx, сервер: bla bla ....

Теперь я не хочу полностью отключать ведение журнала ошибок, так как я хочу выяснить, что идет не так, когда что-то идет не так. Я просто хочу отключить ведение журнала этих сообщений «запрещено правилом».

Есть идеи, как это сделать?

4
задан 16 December 2015 в 09:01
2 ответа

Как уже упоминалось здесь , используйте условную каротажную запись:

Включение условной каротажки

Условная запись позволяет исключить тривиальный или неважный каротаж. записи из журнала доступа. В NGINX включено условное протоколирование параметром if директивы access_log.

Например, это позволяет исключить запросы со статусом HTTP коды 2XX (Успех) и 3XX (Переадресация):

map $status $loggable {
 ~^[23] 0;
 по умолчанию 1; }

access_log /path/to/access.log объединены if=$loggable;

РЕДАКТИРОВАНИЕ: так как @zsero описан в комментарии, условное протоколирование поддерживается только в access_log, а не в error_log.ref

2
ответ дан 3 December 2019 в 03:56

Есть лучшее решение , предложено восходящим потоком — использовать геоблок с if, чтобы отклонить такие запросы, как:

geo $blocked {
    default 0;
    1.1.1.1/32 1;
}
...
server {

  if ($blocked) {
    return 444;
  }
}
0
ответ дан 11 March 2021 в 16:25

Теги

Похожие вопросы