- Home »

Как читать access и error логи Nginx
Если ты когда-нибудь сталкивался с ситуацией, когда твой сайт на Nginx вдруг начинает тормозить, сыпать 502 или 404, или просто хочется понять, кто и как его посещает — добро пожаловать в мир логов. Эта статья — твой гайд по чтению, анализу и использованию access и error логов Nginx. Разберём, как они устроены, как быстро их читать и настраивать, какие инструменты и лайфхаки помогут автоматизировать рутину, и почему логи — это не просто “мусор”, а твой лучший друг в администрировании. Всё на практике, с примерами, кейсами и советами, которые реально работают.
Как это работает: философия логов Nginx
Nginx — штука быстрая, но не всевидящая. Чтобы понять, что происходит на сервере, он пишет два основных типа логов:
- access.log — журналирует все запросы к серверу: кто, когда, что запросил, с каким результатом, сколько времени заняло выполнение.
- error.log — фиксирует ошибки: от банальных 404 до фатальных падений воркеров и проблем с backend’ом.
Логи — это не просто “чёрный ящик”, а инструмент для:
- Диагностики проблем (например, почему сайт недоступен или тормозит)
- Анализа трафика (кто, откуда, как часто заходит, что качает)
- Безопасности (выявление атак, подозрительных запросов, брутфорса)
- Оптимизации (поиск узких мест, долгих запросов, неэффективных location’ов)
Всё это — must-have для любого, кто хочет держать сервер под контролем, а не “на авось”.
Как быстро и просто всё настроить
По умолчанию Nginx пишет логи в /var/log/nginx/access.log
и /var/log/nginx/error.log
. Но ты можешь (и должен!) кастомизировать их под свои задачи.
- Где настраивать? — В
nginx.conf
или в конфиге конкретного сайта (server block). - Какой синтаксис? — Пример:
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
- Форматы логов — Можно задать свой формат (например, добавить user-agent, X-Forwarded-For, время обработки запроса и т.д.):
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time';
Совет: Не пиши логи в /tmp или /home — только в /var/log/nginx или отдельную папку с правами только для nginx. Это вопрос безопасности и удобства.
Примеры, схемы, практические советы
Давай разберём реальные кейсы — когда логи спасают, а когда могут подставить.
Кейс | Что видно в access.log | Что видно в error.log | Рекомендация |
---|---|---|---|
Сайт тормозит | Много запросов с большим $request_time | Может быть пусто или 504 Gateway Timeout | Добавь $request_time в log_format, ищи долгие запросы, проверь backend |
Атака брутфорсом | Много POST/GET с одного IP, странные user-agent’ы | Могут быть 403, 401 | Фильтруй по IP, используй fail2ban, анализируй user-agent |
Ошибки 404 | Запросы к несуществующим файлам | 404 Not Found | Проверь пути, настрой редиректы, убери битые ссылки |
Проблемы с SSL | Может быть пусто | SSL: error:… handshake failure | Проверь сертификаты, цепочки, права на ключи |
Лайфхак: Для быстрого поиска проблем используй grep
, awk
, tail
и less
. Например:
tail -f /var/log/nginx/error.log
grep "404" /var/log/nginx/access.log | less
awk '$9 ~ /404/' /var/log/nginx/access.log | less
Положительный кейс: На одном проекте внезапно выросла нагрузка. В access.log увидел кучу запросов к /wp-login.php — классика брутфорса WordPress. Быстро настроил fail2ban на основе логов — и атака ушла в песок.
Отрицательный кейс: На другом сервере логи были отключены “для экономии места”. Когда возникла проблема с падением сайта — никто не понял, что случилось. Пришлось восстанавливать всё “на ощупь”. Вывод: логи должны быть всегда, даже если их потом ротацией чистить.
Команды для работы с логами Nginx
Вот базовый набор команд, который должен быть у каждого админа под рукой:
# Смотреть последние строки лога в реальном времени
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
# Смотреть только ошибки 404
grep "404" /var/log/nginx/access.log
# Считать количество запросов с каждого IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
# Смотреть только ошибки уровня error и выше
grep "error" /var/log/nginx/error.log
# Ротация логов вручную
logrotate /etc/logrotate.d/nginx
# Анализ логов с помощью goaccess (реальный time web-отчёт)
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
Совет: Используй GoAccess или nginx-log-analyzer для красивых и информативных отчётов. Это реально экономит время.
Похожие решения, программы и утилиты
- GoAccess — интерактивная консольная утилита для анализа access.log. Генерирует HTML-отчёты, поддерживает real-time анализ.
- AWStats — мощный, но немного олдскульный анализатор логов. Поддерживает разные форматы, но требует настройки.
- fail2ban — не анализатор, но умеет читать логи и автоматически банить IP за подозрительную активность (например, брутфорс).
- logrotate — стандартная утилита для ротации логов, чтобы не забить диск.
- ELK Stack (Elasticsearch + Logstash + Kibana) — если хочется “по-взрослому” собирать, хранить и визуализировать логи со всех серверов.
Интересный факт: Nginx поддерживает логирование не только в файл, но и в syslog, а также может отправлять логи на удалённый сервер. Это удобно для распределённых систем и облаков.
Статистика и сравнение с другими решениями
Веб-сервер | Гибкость логирования | Инструменты анализа | Автоматизация |
---|---|---|---|
Nginx | Высокая (кастомные форматы, уровни, syslog) | GoAccess, AWStats, ELK, fail2ban | logrotate, скрипты, интеграция с SIEM |
Apache | Очень высокая (LogFormat, CustomLog, piped logs) | AWStats, GoAccess, Webalizer | logrotate, скрипты |
LiteSpeed | Средняя (есть свои форматы, но меньше гибкости) | AWStats, встроенные отчёты | logrotate, встроенная ротация |
Вывод: Nginx — один из самых гибких по части логирования. Можно настроить под любые задачи, от минимализма до enterprise-уровня.
Нестандартные способы использования логов Nginx
- Анализировать поведение ботов и парсеров (например, Googlebot, Яндекс, Ahrefs) — смотри user-agent и частоту запросов.
- Отслеживать эффективность рекламных кампаний — анализируй referer и UTM-метки прямо из access.log.
- Собирать статистику по API — выдели отдельный log_format для API-запросов, чтобы видеть нагрузку и ошибки.
- Автоматически блокировать IP с подозрительной активностью — скрипт на bash/python, который парсит логи и добавляет IP в iptables или fail2ban.
- Интеграция с Telegram/Slack — отправляй алерты о критических ошибках прямо в мессенджер через webhook, если в error.log появляется “segfault” или “upstream timed out”.
Новые возможности: автоматизация и скрипты
Когда ты освоишь базовые команды, откроется целый мир автоматизации:
- Пишешь скрипт, который раз в час анализирует access.log и отправляет отчёт на почту или в чат.
- Настраиваешь ротацию логов так, чтобы старые архивировались и отправлялись в облако (например, на S3 или Яндекс.Диск).
- Интегрируешь логи с системами мониторинга (Zabbix, Prometheus) — и получаешь алерты о проблемах до того, как их заметят пользователи.
- Используешь логи для обучения моделей машинного обучения (например, для выявления аномалий в трафике или предсказания DDoS-атак).
Пример простого скрипта для поиска долгих запросов:
awk '$NF > 1 {print $0}' /var/log/nginx/access.log | sort -kNF | tail -n 20
(Покажет последние 20 запросов, которые выполнялись дольше 1 секунды)
Выводы и рекомендации
Логи Nginx — это не просто “отчёты для галочки”, а мощный инструмент для диагностики, оптимизации и безопасности твоего сервера. Не ленись их настраивать: добавь нужные поля, ротиируй, анализируй, автоматизируй. Используй инструменты типа GoAccess, fail2ban, logrotate — и ты всегда будешь знать, что происходит на сервере, даже если всё вокруг горит.
- Включай логи всегда, даже если кажется, что “и так всё работает”.
- Настраивай кастомные форматы под свои задачи.
- Регулярно анализируй логи — вручную или автоматизировано.
- Не забывай про безопасность: ограничь доступ к логам, не храни их в публичных папках.
- Используй автоматизацию — скрипты, алерты, интеграции с мессенджерами.
Если нужен VPS для экспериментов с Nginx и логами — заказать VPS. Для серьёзных задач — выделенный сервер. А если остались вопросы — смело спрашивай в комментариях, разберём любые кейсы!
Официальные ссылки:
Документация по логам Nginx
GoAccess — анализатор логов
Fail2ban — защита по логам
ELK Stack
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.