【Nginx 入门】Nginx 日志管理
系列文章目录
【Nginx 入门】1、Nginx 简介
【Nginx 入门】2、Nginx 安装与基本配置
【Nginx 入门】3、Nginx 基本命令
【Nginx 入门】4、Nginx 配置语法
【Nginx 入门】5、Nginx 处理请求的流程
【Nginx 入门】6、Nginx 反向代理
【Nginx 入门】7、静态文件服务
【Nginx 入门】8、Nginx 日志管理(本文)
日志管理是 Nginx 配置和维护中的一个重要部分。通过日志,管理员可以监控服务器的运行状态、分析访问情况、排查故障和优化性能。Nginx 提供了强大的日志功能,包括访问日志和错误日志。在本章中,我们将详细介绍 Nginx 的日志管理,帮助你掌握其配置和使用方法。
1. 日志类型
1.1 访问日志
访问日志记录了所有客户端对服务器的请求信息,包括请求的时间、客户端 IP 地址、请求 URI、响应状态码等。访问日志文件的默认位置通常是 /var/log/nginx/access.log
。
1.2 错误日志
错误日志记录了服务器运行过程中发生的错误和异常情况,包括启动、停止和运行时的错误信息。错误日志文件的默认位置通常是 /var/log/nginx/error.log
。
2. 配置日志
2.1 配置访问日志
访问日志可以在 http
、server
或 location
块中配置。下面是一个配置示例:
http {
log_format main '$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 main;
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
在这个配置中:
log_format
指令定义了日志格式,格式名为main
。access_log
指令指定了日志文件路径和使用的格式。
2.2 配置错误日志
错误日志可以在 http
、server
、location
或 if
块中配置。下面是一个配置示例:
http {
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
在这个配置中:
error_log
指令指定了错误日志文件路径和日志级别。
3. 日志格式
3.1 访问日志格式
log_format
指令允许你自定义访问日志的格式。下面是一些常用变量:
$remote_addr
:客户端 IP 地址。$remote_user
:客户端用户名。$time_local
:请求时间和日期。$request
:请求的 URI 和 HTTP 方法。$status
:HTTP 响应状态码。$body_bytes_sent
:发送给客户端的字节数,不包括响应头。$http_referer
:HTTPReferer
头信息。$http_user_agent
:客户端的User-Agent
信息。
示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
3.2 错误日志级别
error_log
指令允许你设置日志记录的级别,级别从低到高依次为:
debug
:记录调试信息。info
:记录一般信息。notice
:记录重要事件。warn
:记录警告信息。error
:记录错误信息。crit
:记录严重错误信息。alert
:记录需要立即处理的信息。emerg
:记录系统不可用的信息。
示例:
error_log /var/log/nginx/error.log warn;
4. 日志轮换
由于日志文件会不断增长,定期进行日志轮换(log rotation)是非常必要的。可以使用 logrotate
工具来自动管理 Nginx 的日志轮换。
4.1 配置 logrotate
首先,创建一个 Nginx 的 logrotate
配置文件,例如 /etc/logrotate.d/nginx
:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
在这个配置中:
daily
:每天轮换一次日志。rotate 14
:保留最近的 14 个日志文件。compress
:压缩轮换的日志文件。delaycompress
:延迟一天压缩日志文件。notifempty
:如果日志文件为空,则不进行轮换。create 0640 www-data adm
:创建新的日志文件,设置权限和所属用户组。sharedscripts
:共享脚本不会并行执行。postrotate
和endscript
:在日志文件轮换后,向 Nginx 主进程发送USR1
信号,通知其重新打开日志文件。
4.2 手动轮换日志
你也可以手动轮换日志文件。首先向 Nginx 主进程发送 USR1
信号:
sudo kill -USR1 `cat /var/run/nginx.pid`
然后将现有的日志文件重命名并压缩:
mv /var/log/nginx/access.log /var/log/nginx/access.log.1
mv /var/log/nginx/error.log /var/log/nginx/error.log.1
gzip /var/log/nginx/access.log.1
gzip /var/log/nginx/error.log.1
5. 日志分析
Nginx 生成的日志文件可以用来分析网站的访问情况和性能。常用的日志分析工具包括:
5.1 goaccess
goaccess
是一个实时日志分析工具,可以生成详细的访问报告:
sudo apt install goaccess
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
5.2 awk
和 grep
你也可以使用 awk
和 grep
这些命令行工具来手动分析日志。例如,查找所有状态码为 404 的请求:
grep ' 404 ' /var/log/nginx/access.log | awk '{print $1, $7, $9}'
6. 示例配置
下面是一个完整的 Nginx 日志配置示例,包括访问日志和错误日志:
http {
log_format main '$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 main;
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name example.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
在这个示例中:
- 定义了自定义的访问日志格式
main
。 - 指定了访问日志和错误日志的文件路径和格式。
- 配置了基本的静态文件服务。
7. 总结
在本章中,我们详细介绍了 Nginx 的日志管理,包括访问日志和错误日志的配置、日志格式的自定义、日志轮换和日志分析。通过这些配置和工具,你可以有效地监控和管理 Nginx 服务器的运行状态,及时发现和解决问题,优化服务器性能。在完成本系列教程后,你已经掌握了 Nginx 的基础知识和配置方法,可以进一步学习和应用更高级的功能和优化技巧。