用 Nginx 日志定位瓶颈并落地优化,可以显著缩短首包与总耗时,提升网站加载速度。下面给出一套从采集、分析到优化的闭环方案。
一 采集关键指标与日志格式
http {
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" '
'rt=$request_time uct=$upstream_connect_time '
'urt=$upstream_response_time cache=$upstream_cache_status';
access_log /var/log/nginx/access.log main_ext buffer=32k flush=5s;
error_log /var/log/nginx/error.log warn;
}
关键字段含义与用途:
二 快速定位慢请求与异常
awk '{print $NF" "$7}' /var/log/nginx/access.log | sort -nr | head
awk '{print $9}' access.log | sort | uniq -c | sort -nrtail -f /var/log/nginx/error.loggoaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED三 基于日志洞察的优化动作
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss text/javascript;
keepalive_timeout 65;
worker_processes auto; worker_connections 4096;(结合实例规格调优)。access_log ... buffer=32k flush=5s;。proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
location / {
proxy_cache STATIC;
proxy_pass http://backend;
proxy_cache_valid 200 304 10m;
}
}
四 监控告警与持续优化闭环
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}