NGINX访问日志和错误日志
日志对于监视任何应用程序的活动非常有用,除了在您排除故障时为您提供有价值的信息外。
与其他任何应用程序一样,NGINX还记录事件,例如您的访问者,遇到的问题以及更多记录日志文件的事件。
该信息使您能够采取先发制人的措施,以防万一您注意到日志事件中的某些严重差异。
本文将指导您有关如何配置NGINX日志记录的详细信息,以便您更好地了解其活动。
登录NGINX
默认情况下,NGINX将其事件写入两种类型的日志中:错误日志和访问日志。
在大多数流行的Linux发行版(如Ubuntu,CentOS或者Debian)中,访问和错误日志都可以在/var/log/nginx
中找到,前提是您已经在核心NGINX配置文件中启用了访问和错误日志。
让我们找到有关NGINX访问日志,错误日志以及如果您之前没有做过的话如何启用它们的更多信息。
什么是NGINX访问日志?
NGINX在访问日志中记录到您站点的所有访问者的活动。
其中您可以找到要访问的文件,NGINX如何响应请求,客户端使用的浏览器,客户端的IP地址等等。
可以使用访问日志中的信息来分析流量,以查找一段时间内的站点使用情况。
此外,通过适当地监视访问日志,可以发现用户是否正在发送一些异常请求来查找已部署的Web应用程序中的缺陷。
什么是NGINX错误日志?
另一方面,如果NGINX遇到任何故障,则它将事件记录到错误日志中。
如果配置文件中存在某些错误,则可能会发生这种情况。
因此,如果NGINX无法启动或者突然停止运行,则应检查错误日志以查找更多详细信息。
您可能还会在错误日志中找到很少的警告,但它并不表示已发生问题,但该事件可能会在不久的将来造成严重的问题。
如何启用NGINX访问日志?
通常,可以在http或者服务器部分中使用access_log
指令启用访问日志。
第一个参数log_file是必需的,而第二个参数log_format是可选的。
如果您未指定任何格式,则日志将以默认的组合格式写入。
access_log log_file log_format;
默认情况下,访问日志是在核心NGINX配置文件的http上下文中启用的。
这意味着所有虚拟主机的访问日志将记录在同一文件中。
http { ... ... access_log /var/log/nginx/access.log; ... ... }
最好通过将所有虚拟主机的访问日志记录在一个单独的文件中来隔离它们。
为此,您需要在服务器上下文中用另一个access_log
指令覆盖http节中定义的access_log
指令。
http { ... ... access_log /var/log/nginx/access.log; server { listen 80; server_name domain1.com access_log /var/log/nginx/domain1.access.log; ... ... } }
重新加载NGINX以应用新设置。
要在文件/var/log/nginx/domain1.access.log中查看domain1.com域的访问日志,请在终端中使用以下tail命令。
# tail -f /var/log/nginx/domain1.access.log
在访问日志中应用自定义格式
用于在访问日志中记录事件的默认日志格式是组合日志格式。
您可以通过创建自己的自定义日志格式来覆盖默认行为,然后在access_log指令中指定自定义格式的名称。
以下示例通过使用响应的gzip压缩率的值扩展预定义的组合格式来定义自定义日志格式。
然后通过使用access_log
指令指示日志格式来应用格式。
http { log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; server { gzip on; ... access_log /var/log/nginx/domain1.access.log custom; ... } }
在您的环境中应用上述日志格式后,请重新加载NGINX。
现在,在日志事件的末尾尾随访问日志以找到gzip比率。
# tail -f /var/log/nginx/domain1.access.log 47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain1.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"
如何启用NGINX错误日志?
" error_log"指令通过指定要记录的错误消息的最低严重性级别,将错误记录设置为文件,stderr或者syslog。
error_log指令的语法为:
error_log log_file log_level;
第一个参数log_file定义日志文件的路径,第二个参数log_level定义要记录的日志事件的严重性级别。
如果您未指定log_level,则默认情况下,仅记录严重性级别为error的日志事件。
例如,以下示例将要记录的错误消息的严重性级别设置为"暴击"。
此外,http上下文中的error_log指令表示所有虚拟主机的错误日志将在单个文件中可用。
http { ... error_log /var/log/nginx/error_log crit; ... }
通过覆盖服务器上下文中的error_log指令,还可以单独记录所有虚拟主机的错误日志。
下面的示例通过在服务器上下文中重写error_log指令来实现此目的。
http { ... ... error_log /var/log/nginx/error_log; server { listen 80; server_name domain1.com; error_log /var/log/nginx/domain1.error_log warn; ... } server { listen 80; server_name domain2.com; error_log /var/log/nginx/domain2.error_log debug; ... } }
上面描述的所有示例都将日志事件记录到文件中。
您还可以配置error_log指令,以将日志事件发送到syslog服务器。
以下error_log指令以调试格式将错误日志发送到IP地址为192.168.10.11的syslog服务器。
error_log syslog:server=192.168.10.11 debug;
在某些情况下,您可能要禁用错误日志。
为此,请将日志文件名称设置为/dev/null
。
error_log /dev/null;
Nginx错误日志的严重性级别
有许多类型的日志级别与日志事件相关联,并且具有不同的优先级。
下面列出了所有日志级别。
在以下日志级别中,调试具有最高优先级,并且还包括其余级别。
例如,如果您将错误指定为日志级别,则它将同时捕获标记为暴击,警报和紧急事件的日志事件。
emerg:系统可能不稳定时的紧急消息。
警报:严重问题的警报消息。
爆击:需要立即处理的关键问题。
错误:发生错误。
处理页面时出了点问题。警告:您应该查看的警告消息。
注意:您可以忽略的简单日志通知。
info:您可能想知道的一条信息消息。
debug:用于查明错误位置的调试信息。