
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.com.conf
http { ... access_log /var/log/nginx/access.log ; ... server { server_name domain.com 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"' ;
Чтобы изменить формат журнала, переопределите настройку по умолчанию или определите новый. Например, чтобы определить новый формат журнала с именем custom , который расширит комбинированный формат значением, отображающим заголовок 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 ;
Хотя журнал доступа предоставляет очень полезную информацию, он занимает место на диске и может повлиять на производительность сервера. Если на вашем сервере мало ресурсов, а ваш сайт загружен, возможно, стоит отключить журнал доступа. Для этого установите значение off для директивы access_log :
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.com на warn нужно использовать:
http { ... error_log /var/log/nginx/error.log ; ... server { server_name domain.com 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. Если имя пользователя не указано, в этом поле отображается-. -
[$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 позволяет вам настраивать журналы доступа и ошибок в соответствии с вашими потребностями.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства
- Защитите Nginx с помощью Let's Encrypt на CentOS 8
- Как запустить, остановить или перезапустить Nginx
- Защитите Nginx с помощью Let's Encrypt на Debian 10 Linux
- Как установить Odoo 13 на Ubuntu 18.04
- Как установить Nginx на CentOS 8
- Перенаправление HTTP на HTTPS в Nginx
- Как установить Nginx на Debian 10 Linux