Home » Настройка логирования и ротации логов в Nginx на Ubuntu VPS
Настройка логирования и ротации логов в Nginx на Ubuntu VPS

Настройка логирования и ротации логов в Nginx на Ubuntu VPS

Сегодня разберёмся, как грамотно настроить логирование и ротацию логов в Nginx на Ubuntu VPS. Почему это важно? Потому что логи — это ваши глаза и уши на сервере. Они расскажут, кто ломился на сайт, почему упал сервис, кто грузит сервер, и сколько трафика вы реально переварили. Но если не следить за логами, они могут превратиться в гигантскую помойку, забить диск и превратить VPS в кирпич. В этой статье — практические советы, примеры, схемы и даже немного магии автоматизации. Всё, чтобы вы могли быстро и без боли настроить логи на своём сервере и не бояться, что однажды ночью VPS внезапно скажет: «No space left on device».

Как устроено логирование в Nginx?

Nginx — штука гибкая. По умолчанию он пишет два типа логов: access.log (все запросы к серверу) и error.log (ошибки, фейлы, баги и прочие неприятности). Места хранения логов обычно такие:

  • /var/log/nginx/access.log
  • /var/log/nginx/error.log

Но никто не мешает вам настроить свои пути, форматы, уровни детализации. Всё это делается в конфиге /etc/nginx/nginx.conf или в отдельных server-блоках.

Вот базовый пример:


http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
}

Nginx поддерживает разные уровни логирования ошибок: debug, info, notice, warn, error, crit, alert, emerg. Для продакшна обычно достаточно warn или error.

Как быстро и просто всё настроить?

Всё начинается с понимания: что и куда логировать? Если у вас несколько сайтов на одном VPS, лучше для каждого сделать отдельные логи. Это упростит разбор полётов, если что-то пойдёт не так.

  • Для каждого server блока можно задать свои логи:


server {
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
...
}

  • Хотите больше информации? Настройте кастомный формат логов:


http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}

Теперь Nginx будет писать логи в удобном для анализа формате. Можно добавить или убрать поля — всё настраивается.

Ротация логов: чтобы не сожрать весь диск

Вот тут начинается самое интересное. Логи растут быстро. Очень быстро. Особенно если у вас популярный сайт или кто-то решил устроить DDoS. Поэтому нужна ротация — автоматическое архивирование и удаление старых логов.

В Ubuntu для этого есть logrotate. Он уже предустановлен почти всегда. Его задача — по расписанию сжимать, архивировать и удалять старые логи.

  • Конфиг для Nginx обычно лежит тут: /etc/logrotate.d/nginx

Вот пример типового конфига:


/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}

Что тут происходит?

  • daily — ротация каждый день
  • rotate 14 — хранить 14 архивов (две недели)
  • compress — архивировать старые логи (gzip)
  • notifempty — не трогать пустые логи
  • create 0640 www-data adm — создавать новые логи с нужными правами
  • postrotate … endscript — после ротации отправить сигнал Nginx, чтобы он открыл новые файлы логов

Всё, что вам нужно — проверить, что этот файл существует и выглядит примерно так. Если нет — создайте его.

Практические советы и кейсы

Кейс Что происходит Рекомендация
Логи не ротируются, диск забит logrotate не настроен или не работает Проверьте logrotate и его крон. Запустите вручную: sudo logrotate -f /etc/logrotate.d/nginx
После ротации логи пустые Nginx продолжает писать в старый файл Убедитесь, что в postrotate есть kill -USR1 для Nginx
Логи слишком подробные, много мусора Включён debug или info уровень Понизьте уровень логирования до warn или error
Нужно быстро найти ошибку Логи огромные, grep тормозит Используйте zgrep для архивов, multitail или lnav для просмотра

Полезные команды


# Проверить размер логов
sudo du -sh /var/log/nginx/*

# Принудительно запустить ротацию
sudo logrotate -f /etc/logrotate.d/nginx

# Посмотреть последние строки лога
tail -f /var/log/nginx/access.log

# Найти ошибки 500
grep " 500 " /var/log/nginx/access.log

# Просмотреть архивированные логи
zcat /var/log/nginx/access.log.1.gz | grep " 404 "

Альтернативные решения и утилиты

  • GoAccess — интерактивная аналитика логов в реальном времени (goaccess.io)
  • lnav — просмотр логов с фильтрами и подсветкой (lnav.org)
  • multitail — просмотр сразу нескольких логов в терминале (multitail)
  • logrotate — стандарт для ротации логов в Linux (man logrotate)
  • systemd-journald — если Nginx собран с поддержкой systemd, можно писать логи прямо в журнал

Сравнение: logrotate vs. другие подходы

Решение Плюсы Минусы
logrotate Просто, надёжно, по умолчанию в Ubuntu, гибкая настройка Не real-time, не для распределённых систем
systemd-journald Централизованный журнал, поиск по времени, фильтры Не всегда удобно для Nginx, нужен systemd
Внешние сервисы (ELK, Graylog) Аналитика, визуализация, алерты Сложно, ресурсоёмко, избыточно для маленьких VPS

Интересные факты и нестандартные лайфхаки

  • Можно писать логи не только в файл, но и в syslog или даже в Unix socket — удобно для интеграции с внешними системами.
  • Для особо параноидальных — можно шифровать архивы логов с помощью logrotate и скриптов postrotate.
  • Если у вас SSD и вы боитесь износа — храните логи в RAM-диске (tmpfs), а архивируйте на диск раз в сутки.
  • Для автоматизации анализа логов — пишите скрипты на bash/python, которые парсят логи после ротации и отправляют отчёты в Telegram/Slack.

Автоматизация и новые возможности

Грамотно настроенное логирование открывает двери для автоматизации:

  • Мониторинг ошибок и алерты: скрипты, которые сканируют свежие логи и сразу пишут вам, если что-то пошло не так.
  • Автоматическое удаление подозрительных IP: анализируйте логи и баньте злоумышленников на лету.
  • Генерация отчётов по посещаемости, топ-страницам, рефералам — всё это можно делать прямо из логов без Google Analytics.
  • Интеграция с CI/CD: после деплоя автоматически проверять логи на наличие новых ошибок.

Выводы и рекомендации

Логирование и ротация логов в Nginx — это не только про «чтобы не забился диск». Это про контроль, безопасность и удобство. Настроив всё один раз, вы получите:

  • Чистый сервер без гигабайт мусора
  • Возможность быстро находить и чинить баги
  • Инструменты для анализа и автоматизации
  • Спокойный сон — сервер не упадёт из-за переполнения логов

Рекомендую: всегда настраивайте отдельные логи для каждого сайта, используйте logrotate с ежедневной ротацией, не храните логи дольше месяца (если не нужно для аудита), и автоматизируйте анализ логов. Для продвинутых — интеграция с внешними сервисами и алертами.

Если вы только выбираете VPS для своих проектов — посмотрите здесь. Для мощных задач — выделенные серверы.

Официальная документация Nginx по логированию: nginx.org/en/docs/http/ngx_http_log_module.html
Документация по logrotate: linux.die.net/man/8/logrotate

Пусть ваши логи будут информативными, а сервер — быстрым и чистым!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked