nginx日志配置详解
  

Hacking 185

{{ttag.title}}
写在前面

    日志对于统计排错来说非常有利的。本文总结了 Nginx 日志相关的配置如 access_log、 log_format、open_log_file_cache、 log_not_found、 log_subrequest、 rewrite_log、 error_log。

配置Nginx日志

Nginx 有一个非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过 log_format命令来定义。 ngx_http_log_module 是用来定义请求日志格式的。
access_log 指令

语法:

access_log path [format [buffer=size [flush=time]]];
access_log path format gzip[=level] [buffer=size] [flush=time];
access_log syslog:server=address[,parameter=value] [format];
access_log off;

默认值:

access_log logs/access.log combined;

配置段:

http, server, location, if in location, limit_except

    gzip 压缩等级。
    buffer 设置内存缓存区大小。
    flush 保存在缓存区中的最长时间

不记录日志:

access_log off;

使用默认 combined 格式记录日志:

access_log logs/access.log

或者

access_log logs/access.log combined;

log_format 指令

语法:

log_format name string …;

默认值:

log_format combined “…” ;

配置段:

http

    name 表示格式名称
    string 表示等义的格式。

log_format 有一个默认的无需设置的 combined 日志格式,相当于apache 的 combined 日志格式,如下所示:

log_format combined '$remote_addr - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';

如果 nginx 位于负载均衡器, squid, nginx 反向代理之后, web 服务器无法直接获取到客户端真实的 IP 地址了。
$remote_addr 获取反向代理的 IP 地址。反向代理服务器在转发请求的 http 头信息中,可以增加 X-ForwardedFor 信息,用来记录 客户端 IP 地址和客户端请求的服务器地址。 如下所示:

log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';

日志格式允许包含的变量注释如下:

    $remote_addr, $http_x_forwarded_for 记录客户端 IP 地址
    $remote_user 记录客户端用户名称
    $request 记录请求的 URL 和 HTTP 协议
    $status 记录请求状态
    $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与 Apache 模块 mod_log_config 里的“%B”参数兼容。
    $bytes_sent 发送给客户端的总字节数。
    $connection 连接的序列号。
    $connection_requests 当前通过一个连接获得的请求数量。
    $msec 日志写入时间。单位为秒,精度是毫秒。
    $pipe 如果请求是通过 HTTP 流水线(pipelined)发送, pipe 值为“p”,否则为“.”。
    $http_referer 记录从哪个页面链接访问过来的
    $http_user_agent 记录客户端浏览器相关信息
    $request_length 请求的长度(包括请求行,请求头和请求正文)。
    $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    $time_iso8601 ISO8601 标准格式下的本地时间。
    $time_local 通用日志格式下的本地时间。

注意:发送给客户端的响应头拥有“sent_http_”前缀。 比如$sent_http_content_range。

实例如下:

http {log_format main '$remote_addr - $remote_user [$time_local] "$request" ''"$status" $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''"$gzip_ratio" $request_time $bytes_sent $request_length';log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" ''"$status" $body_bytes_sent $request_time $bytes_sent$request_length ''[$upstream_response_time] [$srcache_fetch_status][$srcache_store_status] [$srcache_expire]';open_log_file_cache max=1000 inactive=60s;server {server_name ~^(www\.)?(.+)$;access_log logs/$2-access.log main;error_log logs/$2-error.log;location /srcache {access_log logs/access-srcache.log srcache_log;}}
}

open_log_file_cache 指令

语法:

open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;

默认值:

open_log_file_cache off;

配置段:

http, server, location

对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭。可以使用 open_log_file_cache 来设置日志文件缓存(默认是 off)。

参数注释如下:

    max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用 LRU 算法将描述符关闭。
    inactive:设置存活时间,默认是 10s
    min_uses:设置在 inactive 时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是 1 次
    valid:设置检查频率,默认 60s
    off:禁用缓存

实例如下:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

log_not_found 指令

语法:

log_not_found on | off;

默认值:

log_not_found on;

配置段:

http, server, location

是否在 error_log 中记录不存在的错误。默认是。
log_subrequest 指令

语法:

log_subrequest on | off;

默认值:

log_subrequest off;

配置段:

http, server, location

是否在 access_log 中记录子请求的访问日志。默认不记录。
rewrite_log 指令

由 ngx_http_rewrite_module 模块提供的。用来记录重写日志的。对于调试重写规则建议开启。 Nginx 重写规则指南

语法:

rewrite_log on | off;

默认值:

rewrite_log off;

配置段:

http, server, location, if

启用时将在 error log 中记录 notice 级别的重写日志。
error_log 指令

语法:

error_log file | stderr | syslog:server=address[,parameter=value] [debug | info | notice |
warn | error | crit | alert | emerg];

默认值:

error_log logs/error.log error;

配置段:

main, http, server, location

配置错误日志。

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

新手751436 发表于 2024-4-22 21:49
  
学习一下,了解一下知识
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
干货满满
技术笔记
新版本体验
产品连连看
技术咨询
GIF动图学习
功能体验
自助服务平台操作指引
标准化排查
2023技术争霸赛专题
通用技术
秒懂零信任
信服课堂视频
社区帮助指南
技术晨报
答题自测
安装部署配置
上网策略
运维工具
SANGFOR资讯
设备维护
每日一记
用户认证
项目案例
玩转零信任
深信服技术支持平台
畅聊IT
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
测试报告
日志审计
问题分析处理
流量管理
云计算知识
原创分享
解决方案
sangfor周刊
VPN 对接
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

新手89785...

本周建议达人

YangZhe...

本周分享达人