- Home »

Настройка логирования и ротации логов в 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
Пусть ваши логи будут информативными, а сервер — быстрым и чистым!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.