NGINX регистрирует все клиентские запросы сразу после обработки запроса в журналах доступа. В журналах доступа вы увидите, к каким файлам обращались, как NGINX ответил на запрос, какой браузер использует клиент, IP-адреса клиентов и многое другое в этом разделе. Информацию из журнала доступа можно использовать для оценки трафика и мониторинга использования сайта с течением времени. Если пользователь отправляет какие-либо подозрительные запросы, мы можем отслеживать их с помощью журналов доступа, и это помогает нам выявить уязвимости безопасности приложений.
Какова цель журнала ошибок?
Всякий раз, когда NGINX сталкивается с какими-либо проблемами, он регистрирует их в журнале ошибок. Возможна ошибка в конфигурационном файле, NGINX не запускается или неожиданно остановился, или NGINX сталкивается с какими-либо проблемами, или если какие-либо ошибки исходят от восходящего соединения или времени соединения и т. д., они будут зарегистрированы в журнале ошибок.
Эти проблемы классифицируются как debug
, info
, notice
, warn
, error
. Уровень журнала ошибок по умолчанию — error
, и он работает глобально. По умолчанию журнал ошибок находится по адресу logs/error.log
. Директива журнала ошибок переопределяет настройку, унаследованную от более высоких уровней, и может быть определена на уровнях http
, stream
, server
и location
.
Как настроить журнал доступа Nginx?
Запросы Nginx регистрируются в контексте места, где заканчивается обработка. Оно может отличаться от первоначального местоположения. которые можно найти в разделах HTTP
, server
или location
. Синтаксис директивы access_log
таков:
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:
access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
По умолчанию Nginx регистрирует журнал доступа в предопределенном формате combined
. Мы можем перезаписать формат журнала доступа в соответствии с требованиями.
В следующих примерах определяется формат журнала, который расширяет предопределенный формат combined
со значением, указывающим степень сжатия ответа gzip.
http { log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"';
server { gzip on; access_log /spool/logs/nginx-access.log compression; ... } }
Как настроить журнал ошибок Nginx?
Директива error_log
устанавливает протоколирование ошибок на file
или stderr
, или Syslog
, указывая минимальный уровень серьезности сообщений об ошибках, которые должны быть зарегистрированы. Синтаксис директивы error_log
таков:
error_log /path/to/log_file log_level;
Пример
error_log /var/log/nginx/error_log warn;
Это даст указание Nginx регистрировать все сообщения типа предупреждения и более серьезные критические, предупреждающие и аварийные сообщения на уровне журнала.
Пользовательский формат в журнале nginx?
Формат combined log
— это формат журнала по умолчанию для хранения всех транзакций в журнале доступа. Вы можете создать свой собственный формат журнала, а затем указать имя пользовательского формата в директиве журнала доступа; вы можете переопределить поведение по умолчанию.
Конфигурация журнала доступа Nginx по умолчанию
http {
server {
/path/to/log_file/nginx-access.log combined;
...
}
}
Другой пример формата журнала позволяет отслеживать разные значения времени между NGINX и вышестоящим сервером, что может помочь диагностировать проблему, если ваш веб-сайт замедляется. Вы можете использовать следующие переменные для регистрации указанных значений времени:
В первом примере я показываю, как мы можем отслеживать или регистрировать пользовательский агент, время отклика вышестоящего сервера, запрашивать ссылающийся хост, IP-адрес пользователя и т. д.
http {
log_format custom_log_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_host" "$upstream_response_time"' '"$http_referer" "$http_user_agent"'; access_log /spool/logs/nginx-access.log custom_log_format; ....................
}
Во втором примере я показываю, как мы можем отслеживать или регистрировать параметры строки запроса запроса в журналах Nginx.
http {
log_format custom_log_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_host" "$upstream_response_time"' '"$http_referer" "$http_user_agent" clientId="$clientid"';
access_log /spool/logs/nginx-access.log custom_log_format; ....................
}
Я регистрирую параметр запроса строки запроса clientid в журналах Nginx.
Вы можете получить все встроенные переменные Nginx или подробности здесь — Nginx Http Upstream Module Nginx Http Core Module
Как сделать условную регистрацию в журнале Nginx?
Иногда вы можете захотеть регистрировать определенные запросы. Условное ведение журнала используется для этого в Nginx.
Предположим, вы хотите исключить из журналов 200 ответов о статусе.
map $status $log_not_enable_for_200_status { ~^200 0; default 1; }
server { # Other directives here...
access_log /var/log/nginx/nginx-access.log combined if=$log_not_enable_for_200_status; }
Предположим, вы не хотите регистрировать внутренний запрос IP-адреса.
map $remote_addr $log_not_enable_for_internal_ip { "192.168.0.168" 0; "192.168.0.169" 0; "192.168.0.170" 0; default 1; }
server { # Other directives here...
access_log /var/log/nginx/nginx-access.log combined if=$log_not_enable_for_internal_ip; }
Вход в системный журнал?
Если у вас уже есть унифицированные журналы сервера или если обычная среда системного журнала оценивает ваши журналы, вы можете перенаправить свой NGINX access_log
или error_log
с помощью утилиты Syslog. Утилита Syslog — это стандарт ведения журнала машинных сообщений, который позволяет нескольким устройствам отправлять сообщения журнала на один сервер Syslog.
Мы можем установить местоположение Syslog в конфигурации журналов Nginx, используя файл server =
. Это может быть имя домена, IP-адрес или путь к сокету домена UNIX.
error_log syslog:server=unix:/var/log/nginx.sock debug;
access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;
Вы можете получить больше информации о системном журнале Nginx [нажмите здесь] (https://nginx.org/en/docs/syslog.html)
Первоначально опубликовано на https://www.loginradius.com.