作为IT工程师,掌握Nginx日志分析和错误处理是维护Web服务健康运行的关键技能。以下是一份全面的指南:
/var/log/nginx/access.log
/var/log/nginx/error.log
在nginx.conf
中可以自定义日志格式:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
grep:快速过滤特定内容
grep "500" /var/log/nginx/access.log
awk:提取特定字段
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
cut:按分隔符提取内容
cut -d' ' -f7 /var/log/nginx/access.log | sort | uniq -c | sort -nr
GoAccess:实时Web日志分析器
goaccess /var/log/nginx/access.log --log-format=COMBINED
AWStats:高级Web统计工具
原因:上游服务器(如PHP-FPM)无响应
解决方案:
- 检查上游服务是否运行:systemctl status php-fpm
- 增加超时设置:
nginx
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
原因:请求的文件不存在或配置错误
解决方案:
- 检查请求URL是否正确
- 确认root目录设置:
nginx
location / {
root /var/www/html;
index index.html;
}
原因:上传文件超过限制 解决方案:
client_max_body_size 20M;
原因:上游服务器处理超时 解决方案:
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
tail -f /var/log/nginx/error.log | grep -i error
awk '{print $9}' access.log | sort | uniq -c | sort -rn
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
awk '{print $7, $NF}' access.log | sort -k2 -rn | head -20
awk '{if($NF>5) print $7, $NF}' access.log | sort -k2 -rn
awk '{sum+=$10} END {print sum/1024/1024 " MB"}' access.log
grep -E 'Googlebot|Baiduspider' access.log
配置文件示例(/etc/logrotate.d/nginx
):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/usr/sbin/nginx -s reopen
endscript
}
掌握这些Nginx日志分析和错误处理技巧,将帮助你快速定位问题、优化性能并确保Web服务的稳定运行。