Чего не понимают, тем не владеют (И. Гёте).

Настройка журнала ошибок и доступа Nginx

4 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
18 октября 2019
Настройка журнала ошибок и доступа Nginx
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.

 

Вы можете открывать и анализировать лог – файлы, используя стандартные команды, такие как 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 позволяет вам настроить доступ и журналы ошибок в соответствии с вашими потребностями.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 348

Если статья понравилась, то поделитесь ей в социальных сетях:

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close