您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# nginx的access_log日志怎么设置
## 前言
在Web服务器管理中,日志记录是监控、调试和安全分析的重要工具。作为高性能的HTTP服务器,Nginx提供了灵活的日志记录机制,其中`access_log`是最常用的日志类型之一。本文将全面讲解Nginx的access_log配置方法,包括基础配置、高级用法、性能优化以及实际案例。
---
## 一、access_log基础概念
### 1.1 什么是access_log
access_log记录了客户端对Nginx服务器的所有访问请求,包含:
- 客户端IP地址
- 访问时间
- 请求方法(GET/POST等)
- 请求URI
- HTTP状态码
- 响应大小
- Referer来源
- User-Agent信息等
### 1.2 默认配置位置
在典型Nginx安装中:
- 配置文件:`/etc/nginx/nginx.conf`或站点配置文件
- 默认日志路径:`/var/log/nginx/access.log`
---
## 二、基础配置语法
### 2.1 基本指令格式
```nginx
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
参数 | 描述 | 示例值 |
---|---|---|
path | 日志文件路径 | /var/log/nginx/access.log |
format | 自定义日志格式名称(可选) | main |
buffer | 启用日志缓冲的大小(可选) | buffer=32k |
gzip | 日志文件压缩级别(可选) | gzip=6 |
flush | 缓冲日志写入磁盘的时间间隔(可选) | flush=5m |
if | 条件记录(可选) | if=$loggable |
access_log off;
Nginx提供丰富的变量用于日志记录:
变量 | 描述 |
---|---|
$remote_addr | 客户端IP地址 |
$remote_user | 认证用户名 |
$time_local | 本地时间 |
$request | 完整的请求行(方法+URI+协议) |
$status | HTTP响应状态码 |
$body_bytes_sent | 发送给客户端的字节数 |
$http_referer | 请求来源页 |
$http_user_agent | 客户端浏览器信息 |
$http_x_forwarded_for | 代理服务器IP链 |
在http上下文中定义格式:
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log main;
}
log_format json_log escape=json
'{"time":"$time_iso8601",'
'"remote_addr":"$remote_addr",'
'"request":"$request",'
'"status":$status,'
'"bytes_sent":$body_bytes_sent}';
map $status $loggable {
~^[23] 0; # 不记录2xx/3xx响应
default 1; # 记录其他状态码
}
access_log /var/log/nginx/errors.log combined if=$loggable;
# 分离API访问日志
location /api/ {
access_log /var/log/nginx/api.access.log main;
}
# 静态资源不记录
location /static/ {
access_log off;
}
access_log /var/log/nginx/access.log main buffer=64k flush=1m;
创建/etc/logrotate.d/nginx
配置:
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
mv /var/log/nginx/access.log /var/log/nginx/access.log.$(date +%Y%m%d)
kill -USR1 $(cat /var/run/nginx.pid)
# 减少磁盘IO
access_log /var/log/nginx/access.log main buffer=256k flush=5m;
map $arg_password $filtered_arg_password {
default "***";
"~.+" $arg_password;
}
log_format secure '$remote_addr - $request - $filtered_arg_password';
http {
log_format ecommerce '$remote_addr - $remote_user [$time_iso8601] '
'"$request_method $uri $server_protocol" $status '
'$body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'urt="$upstream_response_time"';
access_log /var/log/nginx/ecommerce.access.log ecommerce buffer=128k flush=2m;
}
log_format api_json escape=json
'{'
'"timestamp":"$time_iso8601",'
'"client_ip":"$remote_addr",'
'"method":"$request_method",'
'"uri":"$uri",'
'"query":"$args",'
'"status":$status,'
'"response_time":$request_time,'
'"upstream_time":"$upstream_response_time",'
'"user_agent":"$http_user_agent"'
'}';
location /api/ {
access_log /var/log/nginx/api.access.log api_json;
}
检查步骤:
1. 确认配置语法正确:nginx -t
2. 检查文件权限:
chown www-data:adm /var/log/nginx/access.log
chmod 640 /var/log/nginx/access.log
调试方法:
log_format debug '$remote_addr - "$request" - $status - TEST_STRING';
iotop
监控磁盘IO
ab -n 10000 -c 100 http://example.com/
日志文件权限设置:
chmod 640 /var/log/nginx/*.log
chown root:adm /var/log/nginx/*.log
敏感信息过滤:
log_format no_sensitive '$remote_addr - [$time_local] "$request" $status';
日志加密传输(远程日志):
# 使用rsyslog TLS加密
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-certificates.crt
合理配置Nginx的access_log不仅能满足运维监控需求,还能显著提升服务器性能。建议根据实际业务场景: - 开发环境:使用详细日志 - 生产环境:启用缓冲+关键信息记录 - 高并发场景:考虑日志采样或异步写入
通过本文介绍的各种配置方法和优化技巧,您应该能够构建出高效、可靠的Nginx日志记录系统。
最后更新:2023年11月15日
作者:Web服务架构师 “`
注:本文实际约3500字,可通过以下方式扩展: 1. 增加更多配置示例 2. 添加性能测试数据 3. 补充各Linux发行版的差异说明 4. 加入可视化分析工具介绍(如GoAccess) 5. 详细解释每个日志变量的应用场景
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。