Nginx 是一个开源、高性能的 HTTP 和反向代理服务器 ,负责处理 Internet 上一些最大站点的负载。在管理NGINX Web 服务器时,您将执行的最常见任务之一是检查日志文件。
在对服务器或应用程序问题进行故障排除时,了解如何配置和读取日志非常有用,因为它们提供了详细的调试信息。
Nginx 将其事件记录写入两种类型的日志:访问日志和错误日志。访问日志写入有关客户端请求的信息,错误日志写入有关服务器和应用程序问题的信息。
本文概述了如何配置和读取 Nginx 访问和错误日志。
配置访问日志
每当处理客户端请求时,Nginx 都会在访问日志中生成一个新事件。每个事件记录都包含一个时间戳,并包含有关客户端和请求的资源的各种信息。访问日志可以显示访问者的位置、他们访问的页面、他们在页面上花费的时间等等。
该log_format指令允许您定义记录消息的格式。该access_log指令启用并设置日志文件的位置和使用的格式。
该指令最基本的语法access_log如下:
access_log log_file log_format;
wherelog_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的新日志格式,它将使用显示标题的值扩展组合格式,在or指令X-Forwarded-For中添加以下定义:httpserver
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 在错误日志文件中写入有关应用程序和一般服务器错误的消息。如果您在 Web 应用程序中遇到错误,错误日志是解决问题的第一个开始位置。
该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。
默认情况下,该指令在主 nginx.conf 文件error_log中的指令中定义:http
/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 …- 客户端的用户代理(Web 浏览器)。
使用tail 命令实时查看日志文件:
tail -f access.log
结论
日志文件为您提供有关服务器问题以及访问者如何与您的网站交互的有用信息。
Nginx 允许您根据需要配置访问和错误日志。