在CentOS系统中,Nginx的日志主要分为两类,均位于/var/log/nginx/目录下:
日志格式可通过log_format指令自定义,常见字段包括:$remote_addr(客户端IP)、$time_local(本地时间)、$request(请求方法+路径+协议)、$status(HTTP状态码)、$request_time(请求处理时间)、$http_user_agent(客户端UA)等。
access.log第1列(IP),排序去重并计数,取前10名。awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
access.log第7列(请求路径),排序去重并计数,取前10名。awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
access.log第10列(Referer),统计来源域名分布。awk -F'"' '{print $4}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
access.log第9列(状态码),查看HTTP状态码占比(如200成功、404未找到、500服务器错误)。awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
$request_time字段(需在log_format中配置),可筛选处理时间超过1秒的请求,定位性能瓶颈。awk '$10 > 1' /var/log/nginx/access.log | sort -nr -k10 | head -n 10
(注:$10为$request_time的列号,需根据实际日志格式调整)access.log中状态码为4xx(客户端错误)或5xx(服务器错误)的行,统计错误总数。awk '$9 ~ /^[45]/' /var/log/nginx/access.log | wc -l
grep ' 404 ' /var/log/nginx/access.log
error.log,获取最新的错误信息(如连接上游服务器失败、权限不足)。tail -f /var/log/nginx/error.log
(注:-f表示实时跟踪日志更新)GoAccess是一款开源的实时日志分析工具,可生成HTML报告,直观展示流量、状态码、Referer等信息。
sudo yum install goaccess
goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/nginx_report.html
(--log-format=COMBINED适配Nginx默认的Combined日志格式,-o指定输出HTML文件路径)ELK(Elasticsearch+Logstash+Kibana)适合大规模日志分析,支持全文搜索、趋势图表、告警等功能。
logstash.conf,解析access.log和error.log);Nginx日志会持续增长,需通过logrotate工具定期轮转(切割)、压缩旧日志。
/etc/logrotate.d/nginx,内容如下:/var/log/nginx/*.log {
daily # 每天轮转
missingok # 若日志文件不存在也不报错
rotate 14 # 保留14个旧日志文件
compress # 压缩旧日志(如access.log.1.gz)
delaycompress # 延迟压缩(不压缩最新的旧日志)
notifempty # 若日志为空则不轮转
create 0640 www-data adm # 创建新日志文件的权限和所有者
sharedscripts # 所有日志轮转完成后执行postrotate
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` # 通知Nginx重新打开日志文件
endscript
}
logrotate -vf /etc/logrotate.d/nginx
(-v显示详细过程,-f强制轮转)access.log中的404错误:grep ' 404 ' /var/log/nginx/access.log;awk '{print $7}';ls -l /var/www/html/错误URL路径;access.log中的500错误:grep ' 500 ' /var/log/nginx/access.log;error.log:grep '2025/11/08' /var/log/nginx/error.log(替换为错误发生时间);error.log中的错误描述(如“Permission denied”“upstream timed out”),定位配置问题或上游服务器故障。upstream timed out (110: Connection timed out)(连接上游服务器超时)。systemctl status backend_service;ping 上游服务器IP、telnet 上游服务器IP 8080;iptables -L(确认未阻止Nginx与上游服务器的通信)。