Подробное объяснение конфигурации журнала Nginx

задняя часть сервер Nginx удаленная работа

предисловие

Журналы Nginx полезны для статистики и устранения неполадок системных служб. Журналы Nginx в основном делятся на два типа:access_log(журналы доступа) иerror_log(журнал ошибок). Через журнал доступа мы можем получить IP-адрес пользователя, информацию о браузере, время обработки запроса и другую информацию. В журнал ошибок записывается информация об ошибках доступа, которая может помочь нам найти причину ошибки. В этой статье будет подробно описано, как настроить логирование Nginx.

настраиватьaccess_log

Журналы доступа в основном записывают запросы клиентов. Здесь записывается каждый запрос, сделанный клиентом к серверу Nginx. IP-адрес клиента, информация о браузере, реферер, время обработки запроса, URL-адрес запроса и т. д. можно получить в журнале доступа. Конечно, какую конкретно информацию записывать, можно передатьlog_formatДирективное определение.

грамматика

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志
access_log off; # 关闭访问日志

  • pathУказывает место хранения журнала.
  • formatЗадает формат журнала. По умолчанию предопределеноcombined.
  • bufferИспользуется для указания размера буфера для записи журнала. По умолчанию 64k.
  • gzipЖурнал сжимается перед записью. Можно указать степень сжатия от 1 до 9, чем больше значение, тем выше степень сжатия и медленнее скорость сжатия. По умолчанию 1.
  • flushУстановите срок действия кэша. Если время, указанное в параметре сброса, превышено, содержимое кэша будет очищено.
  • ifУсловное суждение. Если указанное условие оценивается как 0 или пустая строка, запрос не записывается в журнал.

Кроме того, существует специальная стоимость off. Если указано это значение, ведение журнала всех запросов в текущей области отключается.

сфера

может быть примененоaccess_logОбласть применения директивыhttp,server,location,limit_except. То есть, если эта директива используется за пределами этих областей, Nginx сообщит об ошибке.

Выше приведен основной синтаксис директивы access_log и значение параметров. Давайте рассмотрим несколько примеров, чтобы углубить наше понимание.

Основное использование

access_log /var/logs/nginx-access.log

В примере путь записи журнала указывается как/var/logs/nginx-access.log, формат журнала использует формат по умолчаниюcombined.

access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m

В примере путь записи журнала указывается как/var/logs/nginx-access.log, формат журнала использует формат по умолчаниюcombined, укажите, что размер кэша журнала составляет 32 КБ, включите gzip для сжатия журнала перед записью, используйте значение по умолчанию, равное 1, для коэффициента сжатия, а действительное время кэширования данных — 1 минута.

Используйте log_format для настройки формата журнала.

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

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

Если вы не хотите использовать предопределенный формат Nginx, вы можете передатьlog_formatкоманда для настройки.

грамматика

log_format name [escape=default|json] string ...;
  • nameНазвание формата. Упоминается в директиве access_log.
  • escapeКодировка символов в переменной setjsonвсе ещеdefault, по умолчаниюdefault.
  • stringСодержимое формата журнала для определения. Может быть более одного параметра. Переменные Nginx можно использовать в параметрах.

Нижеlog_formatНекоторые переменные, обычно используемые в директивах:

Переменная значение
$bytes_sent Всего байт отправлено клиенту
$body_bytes_sent Количество байтов, отправленных клиенту, не включая размер заголовков ответа.
$connection серийный номер соединения
$connection_requests Текущее количество запросов, сделанных по соединению
$msec Время записи журнала в секундах, точность в миллисекундах
$pipe Значение равно "p", если запрос был отправлен через конвейер http, иначе "."
$request_length Длина запроса (включая строку запроса, заголовок запроса и тело запроса)
$request_time Время обработки запроса, в секундах, с точностью до миллисекунд, начиная с первого байта, прочитанного в клиент, до последнего символа, отправленного клиенту для записи журнала
$status код состояния ответа
$time_iso8601 Местное время в стандартном формате, например "2017-05-24T18:31:27+08:00"
$time_local Местное время в общем формате журнала, например "24/May/2017:18:31:27 +0800"
$http_referer Запрошенный реферальный адрес.
$http_user_agent Информация о браузере клиента.
$remote_addr IP-адрес клиента
$http_x_forwarded_for Если на внешнем интерфейсе есть прокси-сервер, установите конфигурацию веб-узла для записи адреса клиента. Предпосылкой для вступления этого параметра в силу является то, что прокси-сервер также должен выполнять соответствующие настройки x_forwarded_for.
$request Полная необработанная строка запроса, например "GET / HTTP/1.1"
$remote_user Имя пользователя клиента, для запросов с включенной аутентификацией пользователя
$request_uri Полный адрес запроса, например «https://daojia.com/».

Ниже показано использование пользовательского формата журнала:

access_log /var/logs/nginx-access.log main
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

Мы используемlog_formatдиректива определяетmainформате и вaccess_logОб этом говорится в директиве. Если клиент инициирует запрос:https://suyunfe.com/, давайте взглянем на логирование перехваченного мной запроса:

112.195.209.90 - - [20/Feb/2018:12:12:14 +0800] "GET / HTTP/1.1" 200 190 "-" "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36" "-"

Мы видим в финальном логировании$remote_user,$http_referer,$http_x_forwarded_forсоответствует одному-, это потому, что эти переменные пусты.

установить error_log

Журнал ошибок в Nginx черезerror_logинструкции реализованы. Эта директива регистрирует сервер и сообщения об ошибках во время обработки запроса.

грамматика

Настройте путь и уровень журнала для файла журнала ошибок.

error_log file [level];
Default:	
error_log logs/error.log error;

Первый параметр указывает, куда записывается журнал.

Второй параметр указывает уровень ведения журнала. уровень может бытьdebug, info, notice, warn, error, crit, alert,emergлюбое значение в . Вы можете видеть, что его диапазон значений расположен от низкой до высокой срочности. В журнал ошибок будет записываться только уровень ошибок журнала, равный или превышающий значение, указанное в level. Значение по умолчаниюerror.

Основное использование

error_log /var/logs/nginx/nginx-error.log

Его можно настроить в:main,http, mail, stream, server, locationсфера.

В примере путь к журналу ошибок указан как:/var/logs/nginx/nginx-error.log, уровень журнала использует значение по умолчаниюerror.

open_log_file_cache

Каждая запись журнала записывается путем открытия файла, записи записи и последующего закрытия файла журнала. Если вы используете переменную в пути к файлу журнала, напримерaccess_log /var/logs/$host/nginx-access.log, чтобы повысить производительность, вы можете использоватьopen_log_file_cacheДиректива устанавливает кэш дескрипторов файла журнала.

грамматика

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  • maxУстановить максимальное количество файловых дескрипторов в кеше, если он заполнен, алгоритм LRU используется для закрытия дескриптора.
  • inactiveУстановите время выживания кеша, по умолчанию 10 секунд.
  • min_usesсуществуетinactiveЗа период времени лог-файл используется как минимум несколько раз, а дескриптор лог-файла записывается в кеш.По умолчанию 1 раз.
  • valid: Установите, как долго будет проверяться имя файла журнала, чтобы увидеть, изменилось ли оно, по умолчанию — 60 с.
  • off: Не использовать кеш. По умолчанию отключено.

Основное использование

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

Его можно настроить вhttp,server,locationв области.

В этом примере кеш настроен на кэширование дескрипторов файлов журнала до 1000. Если доступ к дескриптору файла журнала в кеше осуществляется хотя бы дважды в течение 20 с, он не будет закрыт кешем. Каждую 1 минуту проверяйте, существует ли имя файла дескриптора файла в кеше.

Суммировать

Через Nginxaccess_logиerror_logДиректива настраивает журнал доступа и журнал ошибок черезlog_formatМы можем настроить формат журнала. Если в пути файла журнала используются переменные, мы можем передатьopen_log_file_cacheИнструкции по настройке кеша для повышения производительности.

Кроме того, вaccess_logиlog_formatВ программе используется множество переменных.Официальная документация Nginx