Nginx 的日志功能是监视服务器健康状况、调试问题、分析流量趋势的重要工具。主要包括两种类型:access_log 和 error_log,分别记录访问信息和错误消息。
Access Log (访问日志)
Access log 记录每次成功的 HTTP 请求的信息,包括日期和时间、客户端 IP、请求方法、URL、状态代码、响应大小等。这对监控网站活动、SEO 优化、检测异常模式非常有用。
Error Log (错误日志)
Error log 包括警告和错误消息,当 Nginx 遇到问题无法正常处理请求时生成。这些日志帮助诊断配置错误、脚本故障或服务器硬件问题。
日志级别
Nginx 支持五种日志级别:
- debug
- info
- notice
- warn
- error
- crit
- alert
- emerg
这些级别的严重程度逐渐升高,通常情况下,配置为 info 级别能提供有用的输出而不产生过多日志。在生产环境中,可能希望将级别设为 warn 或更高,以减少日志量。
输出格式
Nginx 支持自定义日志格式,通过 log_format 指令定义。例如:
log_format main '[$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
这里是标准的 access log 格式,其中 $time_local 是当前时间,"$request" 是完整的请求行,$status 是 HTTP 状态代码,$body_bytes_sent 是发送给客户端的字节数,"$http_referer" 是前导页面的地址,"$http_user_agent" 是客户端软件的用户代理字符串。
配置示例
配置日志文件的位置和格式:
http {
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
}
在 server 或 location 块中也可以指定日志行为:
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.access.log main;
error_log /var/log/nginx/example.error.log debug;
}
高级功能
- 日志旋转:通过外部程序(如 logrotate)定期切割大日志文件,防止单个文件过大。
- 远程日志:使用 syslog 或 UDP 发送日志到集中式的日志管理系统,如 ELK Stack (Elasticsearch, Logstash, Kibana)或 Splunk。
- 动态日志控制:使用
reopen指令在运行中改变日志设置,无需重启 Nginx。
通过有效配置和管理 Nginx 日志,不仅能够即时发现和解决问题,还能优化服务器性能,是日常运维不可或缺的一部分。