У меня есть сервер 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
для ручной фильтрации ботов из вашего журнала :).