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

nginx: остановить журнал ошибок от ботов поисковых систем

У меня есть сервер centos 7 с nginx 1.6.2, и я хотел бы остановить журнал ошибок, когда бот из поисковой системы делает ошибку 404 на моем веб-сайте. Это для того, чтобы иметь чистый журнал ошибок, только с «истинными ошибками».

Как это возможно ?

Я пробовал это на своих хостах, но это не работает

    server {
       ...
       error_log /var/log/nginx/errors.log;


       if ($http_user_agent ~* (googlebot|yahoo|bingbot)) {
          error_log /dev/null crit;
       }

       ...    
  }

В свою очередь, перезапуск службы nginx завершится неудачно:

nginx: [Emerg] директива error_log недопустима в /etc/nginx/conf.d/mysite.conf:18

Идея ? Заранее спасибо !

Наконец я нашел промежуточное решение:

server {
  ...
  error_log /var/log/nginx/errors.log;

  location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    try_files $uri =410;
    access_log off;
    log_not_found  off;
   }
}

Этот код позволяет избежать регистрации ошибок при отсутствии важных файлов.

Спасибо за помощь

Как указано в документация nginx, направление error_log нельзя использовать внутри if контекст.

Синтаксис: файл error_log | stderr | системный журнал: сервер = адрес [, параметр = значение] [отладка | информация | уведомление | предупредить | ошибка | крит | предупреждение | Emerg];

По умолчанию: error_log logs / error.log ошибка;

Контекст: основной, http, сервер, расположение


Для фильтрации error_log запись, вы не можете просто положиться на nginx. Есть идея использовать syslog для фильтрации строк журнала. Nginx версии 1.7.1 и выше поддержка записи в системный журнал (конечно, вы должны обновить версию nginx).

Каждое программное обеспечение системного журнала имеет свой синтаксис для фильтрации. Например:

Конечно, вы можете просто использовать grep -v для ручной фильтрации ботов из вашего журнала :).