Nginx – это высокопроизводительный HTTP и обратный прокси-сервер с открытым исходным кодом, отвечающий за загрузку некоторых из крупнейших сайтов в Интернете. При управлении веб-серверами NGINX одной из самых частых задач, которые вы выполняете, является проверка файлов журнала.
Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложений, поскольку они предоставляют подробную информацию об отладке.
Nginx записывает записи своих событий в два типа журналов: журналы доступа и журналы ошибок. В журналах доступа записывается информация о клиентских запросах, а в журналах ошибок записывается информация о проблемах сервера и приложения.
В этой статье рассказывается, как настроить и прочитать журналы доступа и ошибок Nginx.
Настройка журнала доступа
Всякий раз, когда обрабатывается запрос клиента, Nginx генерирует новое событие в журнале доступа. Каждая запись события содержит метку времени и включает в себя различную информацию о клиенте и запрошенном ресурсе. Журналы доступа могут показать вам местоположение посетителей, страницу, которую они посещают, сколько времени они проводят на странице и многое другое.
Директива log_format позволяет определить формат сообщений журнала. Директива access_log позволяет и задает расположение файла журнала и используемый формат.
Самый основной синтаксис директивы access_log следующий:
access_log log_file log_format;
Где log_file – полный путь к файлу журнала и формат log_format, используемый файлом журнала.
Журнал доступа может быть включен либо в http, server или location директива блока.
По умолчанию журнал доступа включен глобально в директиве http внутри основного файла конфигурации Nginx.
/etc/nginx/nginx.conf
http { ... access_log /var/log/nginx/access.log; ... }
Для удобства обслуживания рекомендуется установить отдельный файл журнала доступа для каждого блока сервера. Директива access_log установлена в директиве server перекрывает одну установленные в директиве http (более высокого уровня).
/etc/nginx/conf.d/domain.ru.conf
http { ... access_log /var/log/nginx/access.log; ... server { server_name domain.ru access_log /var/log/nginx/domain.access.log; ... } }
Если формат журнала не указан, Nginx использует предопределенный комбинированный формат, который выглядит следующим образом:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Чтобы изменить формат ведения журнала, либо переопределите настройку по умолчанию, либо определите новый. Например, чтобы определить новый формат ведения журнала с именем main, который расширит объединенный формат значением, показывающим заголовок X-Forwarded-For, добавьте следующее определение в директиву http или server:
log_format custom '$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 custom;
Пока журнал доступа предоставляет очень полезную информацию. занимает место на диске и может повлиять на производительность сервера. Если на вашем сервере недостаточно ресурсов и у вас загруженный веб-сайт, вы можете отключить журнал доступа. Для этого установите значение директивы access_log в off:
access_log off;
Настройка журнала ошибок
Nginx записывает сообщения об ошибках приложения и общих серверах в файл журнала ошибок. Если вы столкнулись с ошибками в вашем веб-приложении, журнал ошибок – это первое место, с которого можно начать устранение неполадок.
Директива error_log включает и устанавливает место и уровень серьезности журнала ошибок. Он принимает следующую форму и может быть установлен в пределах http, server или блока location:
error_log log_file log_level
Параметр log_level устанавливает уровень протоколирования. Ниже перечислены уровни их серьезности (от низкого до высокого):
- debug – отладка сообщений.
- info – информационные сообщения.
- notice – Уведомления.
- warn – Предупреждения.
- error – Ошибки при обработке запроса.
- crit – Критические вопросы. Требует быстрых действий.
- alert – Оповещения. Действие должно быть принято немедленно.
- emerg – Чрезвычайная ситуация. Система находится в нерабочем состоянии.
Каждый уровень журнала включает в себя более высокие уровни. Например, если вы установите уровень журнала как warn, Nginx будет также регистрировать сообщения error, crit, alert и emerg.
Если параметр log_level не указан, по умолчанию используется значение error.
По умолчанию директива error_log определена в директиве http внутри основного файла nginx.conf:
/etc/nginx/nginx.conf
http { ... error_log /var/log/nginx/error.log; ... }
Как и в случае с журналами доступа, рекомендуется устанавливать отдельный файл журнала ошибок для каждого блока сервера, который переопределяет параметр, унаследованный от более высоких уровней.
Например, чтобы установить журнал ошибок domain.ru для warn, используйте:
http { ... error_log /var/log/nginx/error.log; ... server { server_name domain.ru error_log /var/log/nginx/domain.error.log warn; ... } }
Всякий раз, когда вы изменяете файл конфигурации, вы должны перезапустить службу Nginx, чтобы изменения вступили в силу.
Расположение файлов журнала
По умолчанию в большинстве дистрибутивов Linux, таких как Ubuntu, CentOS и Debian, журналы доступа и ошибок расположены в каталоге /var/log/nginx.
Чтение и понимание файлов журнала Nginx
Вы можете открывать и анализировать лог – файлы, используя стандартные команды, такие как cat, less, grep, cut, awk, и так далее.
Вот пример записи из файла журнала доступа, который использует формат журнала объединения Nginx по умолчанию:
192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
Давайте разберемся, что означает каждое поле записи:
- $remote_addr- 192.168.33.1 – IP-адрес клиента, сделавшего запрос.
- $remote_user- — HTTP. Аутентифицированный пользователь HTTP. Если имя пользователя не задано, это поле отображается
-
. - [$ time_local] [15/Oct/2019:19:41:46 +0000] – Время локального сервера.
- “$request”- “GET / HTTP/1.1” – Тип запроса, путь и протокол.
- $status- 200 – Код ответа сервера.
- $body_bytes_sent- 396 – Размер ответа сервера в байтах.
- “$http_referer”- “-” – URL реферала.
- “$http_user_agent” – Mozilla/5.0 …- Пользовательский агент клиента (веб-браузер).
Используйте команду tail для просмотра файла журнала в режиме реального времени:
tail -f access.log
Заключение
Файлы журнала предоставляют вам полезную информацию о проблемах сервера и о том, как посетители взаимодействуют с вашим сайтом.
Nginx позволяет вам настроить доступ и журналы ошибок в соответствии с вашими потребностями.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.