Nginx是一个开源的、高性能的HTTP和反向代理服务器,负责处理互联网上一些大型网站的负载。在管理NGINX网站服务器时,最经常执行的任务之一是检查日志文件。
知道如何配置和阅读日志,在排除服务器或应用程序问题时非常有用,因为它们提供了详细的调试信息。
Nginx在两种类型的日志中写入事件记录:访问日志和错误日志。访问日志写的是关于客户端请求的信息,而错误日志写的是关于服务器和应用程序问题的信息。
本文概述了如何配置和阅读Nginx的访问和错误日志。
access_log log_file log_format;
其中log_file是日志文件的完整路径,log_format是日志文件使用的格式。
访问日志可以在http、服务器或位置指令块中启用。
默认情况下,访问日志在Nginx主配置文件的http指令中被全局启用
http {
...
access_log /var/log/nginx/access.log;
...
}
为了提高可读性,建议为每个服务器块设置一个单独的访问日志文件。在服务器指令中设置的access_log指令覆盖了在http(更高层次)指令中设置的指令。
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的日志格式,它将用显示X-Forwarded-For头的值来扩展组合格式,在http或服务器指令中添加以下定义。
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;
error_log log_file log_level
log_level参数设置了日志记录的级别。下面是按严重程度列出的级别(从低到高):
每个日志级别都包括更高的级别。例如,如果你将日志级别设置为警告,Nginx也将记录错误、批评、警报和紧急情况等信息。
当没有指定log_level参数时,默认为error。
默认情况下,error_log指令被定义在nginx.conf主文件中的http指令中。
http {
...
error_log /var/log/nginx/error.log;
...
}
和访问日志一样,建议为每个服务器块设置一个单独的错误日志文件,它将覆盖从上级继承的设置。
例如,要将domain.com的错误日志设置为警告,你可以使用。
http {
...
error_log /var/log/nginx/error.log;
...
server {
server_name domain.com
error_log /var/log/nginx/domain.error.log warn;
...
}
}
无论何时修改配置文件,都必须重启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"
让我们来分析一下记录的每个字段意味着什么。
使用tail命令来实时观察日志文件。
$ tail -f access.log
上一条: 如何修改更新Ubuntu的root密码
下一条: 如何允许远程连接到MySQL数据库服务器