访问日志

Nginx 中的日志类型包括:

  • access.log:记录 Nginx 处理的请求的过程,包含请求类型、时间、客户端信息、处理结果、处理时长等信息,具体可以通过 log_format 指令引用特定变量来记录相关信息。
  • error.log:记录 Nginx 进程启动、停止、重启及处理请求过程中发生的错误信息。
  • rewrite.log:记录 rewrite 规则工作的过程,可以用于调试 rewrite 规则

默认情况下回自动记录 access 日志,默认存放路径为 /usr/local/nginx/logs/access.log

Nginx 提供了 log_format 指令用于自定义 access 日志的格式,它统一在 HTTP 层级进行配置。

log_format 可使用的变量:

变量名说明
$remote_addr记录客户端 IP 地址
$http_x_forwarded_for当 Nginx 处于负载均衡器、Squid、反向代理之后时,需要这个字段才能记录用户的实际 IP 地址
$remote_user记录客户端用户名称,针对启用了用户认证的请求进行记录
$request记录用户请求的 URL
$status记录请求结果状态码
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小
$bytes_sent发送给客户端的字节数,不包括响应头的大小
$connection连接的序列号
$msec日志写入时间,单位为秒,精度为毫秒
$pipe如果请求是通过 HTTP 流水线发送,则其值为 i p,否则为 .
$http_referer记录从哪个页面链接过来的
$http_user_agent记录客户端浏览器相关信息
$request_length请求的长度(包括请求行、请求头和主体)
$request_time请求处理时长,单位为秒,精度为毫秒,从读入客户端的第一个字节开始,知道把最后一个字符发送给客户端进行日志写入为止
$time_iso8601标准格式下的本地时间 2017-05-24T18:31:27+0800
$time_local通过日志格式下的本地时间,形如 24/May/2017:18:31:27 +0800

常见配置:

# 访问日志
# access_log [存储路径] [buff=大小] [gzip=压缩级别] [flush=time 刷新时间]
acess_log /user/local/nginx/logs/access.log buffer=64k flush=1m;
log_format combined '$remote_addr - $remote_user [$time_local]'
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
# 设置日志文件缓存
open_log_file_cache max=1000 inactive=20s min_uses=1 valid=60s;
# 是否将 not found 错误记录在 error_log 中
log_not_found on;
# 在 access_log 在记录子请求的访问日志
log_subrequest off;
# 记录重写日志,默认关闭,开启后记录在 error_log
rewrite_log logs/rewrite.log on;
# 记录错误日志
error_log logs/error.log error;

日志挖掘

数据统计

日志切割

参考资料