NGINX日志
日志作用
监控服务器状态、分析用户行为和排查问题的重要工具,主要的日志类型:访问日志(Access Log)和错误日志(Error Log)
日志种类
-
错误日志 记录 Nginx 服务器运行过程中的错误信息,如配置错误、连接失败、文件权限问题等
- 作用范围:main http server location
- 配置语法:error_log path [level];
- path:日志文件路径,如 /var/log/nginx/error.log
- level(可选):日志级别,从低到高依次为 debug|info|notice|warn|error|crit|alert|emerg
-
访问日志 记录客户端的每一个 HTTP 请求信息,如请求时间、URL、状态码、用户代理等
- 作用范围:main http server location
- 配置语法:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
- path:日志文件路径,如 /var/log/nginx/access.log
- format(可选):日志格式名称,使用 log_format 指令定义
- 其他参数:控制日志缓冲区、压缩、刷新频率等
常用变量
- $remote_addr:客户端 IP 地址
- $remote_user:HTTP 认证的用户名(如果有)
- $time_local:本地时间,格式如 15/Jan/2025:10:00:00 +0800
- $request:请求行,如 GET /index.html HTTP/1.1
- $status:HTTP 状态码(如 200、404)
- $body_bytes_sent:发送给客户端的字节数(不含响应头)
- $http_referer:来源页面的 URL
- $http_user_agent:客户端 User-Agent 信息
- $http_x_forwarded_for:客户端真实 IP(通过代理传递)
日志示例
# 按条件记录访问日志 只记录状态码为 4xx 和 5xx 的请求
map $status $loggable {
~^(4|5) 1; # 匹配 4xx 和 5xx 状态码
default 0;
}
access_log /var/log/nginx/error_requests.log main if=$loggable;
# 分开记录不同域名的日志
server {
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
}
server {
server_name api.example.com;
access_log /var/log/nginx/api.example.com.access.log;
}
# 降低日志记录对性能的影响 使用缓冲区减少磁盘 I/O
access_log /var/log/nginx/access.log main buffer=32k flush=1m;