一、日志配置优化:减少I/O压力与资源占用
log_format指令移除低价值字段(如$http_cookie、冗余的$host),仅保留关键信息($remote_addr、$status、$request_time、$body_bytes_sent)。例如:log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time';,既能满足分析需求,又能降低日志文件大小。map指令或if参数忽略静态资源(如.jpg、.css、.js)的日志记录,或仅记录错误状态码(4xx/5xx)。例如:map $status $loggable {~^[23] 0; default 1;} access_log /var/log/nginx/errors.log main if=$loggable;,减少不必要的日志量。buffer(缓冲区大小,如32k)和flush(刷新间隔,如5m)参数,将日志先写入内存再批量写入磁盘,显著减少磁盘I/O阻塞。例如:access_log /var/log/nginx/access.log main buffer=32k flush=5m;。logrotate工具配置自动轮转(如按天分割、保留7天)、压缩(如gzip)旧日志,避免单个日志文件过大占用存储空间。例如:/var/log/nginx/*.log {daily rotate 7 compress missingok create 0640 www-data adm;}。二、日志分析优化:定位性能瓶颈与安全问题
awk、grep等命令行工具快速统计高频指标。例如:统计访问量TOP 10的IP(awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10)、找出耗时最长的请求(awk '{print $NF,$7}' access.log | sort -nr | head -20)、统计HTTP状态码分布(awk '{print $9}' access.log | sort | uniq -c | sort -rn)。goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html。awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -nr)、异常User-Agent(如包含“sqlmap”的恶意爬虫,awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -nr)。三、性能关联优化:从日志到配置的闭环调整
slow_log记录处理时间超过阈值的请求(如500ms),通过分析慢请求的URL、响应时间,定位性能瓶颈(如后端服务响应慢、数据库查询慢)。例如:log_format slow '$remote_addr - $remote_user [$time_local] "$request" "$http_user_agent" $request_time; access_log /var/log/nginx/slow.log slow; slow_log_threshold 500ms;。gzip_static压缩静态文件;若状态码中500错误较多,需检查后端服务健康状况;若请求量集中在某个URL,可增加该路径的keepalive_timeout或缓存策略。