Nginx Access Logs: значения полей и анализ

Web2026-09-22TryQuickToolBox

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

Формат логов доступа Nginx по умолчанию

По умолчанию Nginx использует формат combined, который выглядит так:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

Типичная строка лога:

192.0.2.1 - - [10/Oct/2023:13:55:36 +0000] "GET /api/users HTTP/1.1" 200 1234 "https://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"

Разбор полей

ПолеПеременнаяОписание
Remote address$remote_addrIP-адрес клиента, сделавшего запрос.
Remote user$remote_userИмя пользователя при HTTP-аутентификации; иначе -.
Time local$time_localЛокальное время сервера в формате [день/месяц/год:час:минута:секунда зона].
Request$requestПолная строка запроса: метод, путь и протокол HTTP.
Status$statusКод состояния HTTP-ответа (например, 200, 404, 500).
Body bytes sent$body_bytes_sentРазмер тела ответа в байтах без учёта заголовков.
Referer$http_refererСтраница, с которой был сделан запрос (если передан клиентом).
User agent$http_user_agentСтрока клиентского ПО (браузер, бот, инструмент).

Настройка формата логов

Вы можете определить собственный формат для записи дополнительных данных, таких как время запроса, время ответа upstream или степень сжатия gzip. Добавьте директиву log_format в блок http и укажите её в access_log.

http {
    log_format detailed '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        'rt=$request_time uct="$upstream_connect_time" '
                        'uht="$upstream_header_time" urt="$upstream_response_time"';

    access_log /var/log/nginx/access.log detailed;
}

Часто используемые дополнительные переменные:

Анализ логов Nginx с помощью командной строки

Для извлечения полезной информации не нужно дорогое ПО. Стандартных Unix-инструментов, таких как grep, awk, sort и uniq, достаточно для большинства задач.

1. Поиск наиболее частых IP-адресов

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Это помогает выявить самых активных клиентов или потенциальные источники DDoS-атак.

2. Определение самых запрашиваемых URL

awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Полезно для понимания популярного контента или выявления необычных шаблонов.

3. Подсчёт кодов состояния HTTP

awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr

Быстро показывает, сколько возникает ошибок 404 или 500.

4. Поиск запросов с медленным временем ответа

Если вы добавили $request_time в формат логов, можно отфильтровать медленные запросы:

awk '{ if ($NF > 1) print }' /var/log/nginx/access.log

При необходимости измените порог (здесь 1 секунда).

5. Обнаружение подозрительных User Agent

awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

Ищите известных вредоносных ботов или необычных клиентов.

Практические сценарии использования

Автоматизация анализа с помощью парсеров логов

Хотя однострочники командной строки подходят для разовых запросов, для регулярной отчётности лучше использовать специализированные инструменты. Можно применять открытые анализаторы логов, такие как GoAccess или AWStats, либо создавать собственные скрипты. Для быстрого анализа прямо в браузере без установки чего-либо Nginx Log Analyzer позволяет вставить строки логов и мгновенно получить сводку по кодам состояния, топовым IP и запрошенным путям.

Лучшие практики управления логами

FAQ

В чём разница между access-логами и error-логами в Nginx?

Access-логи фиксируют каждый запрос, обработанный Nginx, включая IP клиента, метод запроса, код состояния и user agent. Error-логи содержат диагностические сообщения о проблемах сервера, таких как неудачные соединения, ошибки конфигурации или таймауты upstream. Оба типа логов необходимы для разных сценариев отладки.

Как узнать реальный IP клиента, когда Nginx работает за балансировщиком нагрузки?

Когда Nginx находится за прокси или балансировщиком нагрузки, $remote_addr показывает IP балансировщика. Чтобы логировать исходный IP клиента, настройте модуль real_ip на доверие к IP балансировщика и используйте $http_x_forwarded_for или $realip_remote_addr в формате логов.

Можно ли анализировать логи Nginx без установки ПО?

Да. Можно использовать стандартные Unix-команды, такие как grep, awk и sort, прямо в терминале. Для графического подхода в браузере онлайн-инструменты, такие как Nginx Log Analyzer, дают быстрые результаты без какой-либо установки.

Готовы погрузиться в свои логи? Попробуйте Nginx Log Analyzer, чтобы разобрать и визуализировать access-логи за секунды — без настройки.