Nginx 日志配置优化与分析实践
一 基础配置与关键变量
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time $ssl_protocol $ssl_cipher $upstream_addr';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
说明:在有 CDN/反向代理 的场景,务必记录 $http_x_forwarded_for 以获取真实客户端 IP;性能分析重点关注 $request_time 与 $upstream_response_time。二 写入性能优化
access_log /var/log/nginx/access.log main buffer=32k flush=1m;
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
error_log /var/log/nginx/error.log warn;
location /static/ { access_log off; }
location = /healthz { access_log off; }
# 示例:JSON 格式 + syslog
log_format fluentd_json '{"time":"$time_iso8601","remote_addr":"$remote_addr",'
'"request":"$request","status":$status,'
'"bytes_sent":$body_bytes_sent,"request_time":$request_time}';
access_log syslog:server=127.0.0.1:514,tag=nginx fluentd_json;
提示:进行性能优化与变更前先备份配置,变更后用 nginx -t && systemctl reload nginx 验证与生效。三 日志轮转与存储管理
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
运维要点:
logrotate -d /etc/logrotate.d/nginxlogrotate -f /etc/logrotate.d/nginx四 日志分析与可视化
awk '{print $0}' access.log | wc -lawk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -20awk '{print $9}' access.log | sort | uniq -c | sort -nrgoaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
五 基于日志的调优闭环