nginx 日志 域名
域名出问题了?先看nginx日志这本“病历”
上周帮朋友排查一个“怪病”:他的域名突然出现“所有页面都显示404”,但服务器配置、代码部署都没动过。我让他先看nginx的access.log,结果一行记录就揪出了问题——大量重复的“/admin/login”请求,User-Agent全是“Python-urllib/3.9”,再查error.log,发现是nginx误删了站点根目录的配置文件。
这个小插曲让我意识到:nginx日志就像域名的“病历本”,每个请求都是一天中发生的“事件”,通过分析这些事件,能快速定位域名的“健康隐患”。今天就聊聊,如何用nginx日志给域名做“体检”。
一、日志是域名的“访客登记表”,每个字段都是线索
nginx的日志分两种:access.log记录正常访问,error.log记录异常请求。对域名管理来说,这两个日志是“双保险”——前者记“谁来了”“做了什么”,后者记“谁生病住院了”。
1. 先看懂access.log里的“访客信息”
访问日志的核心字段(以默认格式为例):
$remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
$remote_addr:访客IP,域名被攻击时,异常IP集中出现可能是DDoS或爬虫;$status:请求状态码,200是健康码,404是“找不到访客”,502是“访客被拦截”;$http_user_agent:访客身份(浏览器/爬虫),重复的“Baiduspider”可能是没屏蔽的爬虫;$request:请求路径,比如GET /index.html HTTP/1.1,如果大量出现/unknown路径,可能是域名根目录配置错误。
2. 多域名场景:用$host定位“访客来自哪个域名”
如果域名有多个子域名(如www.abc.com和api.abc.com),nginx的server_name指令会让不同域名共用一个配置。这时候$host字段就像“访客身份证”,能精准定位请求来自哪个域名。比如日志里$host全是api.abc.com,但$status突然全是403,大概率是子域名的权限规则被改了。
二、这些“异常日志”,可能是域名的“生病信号”
1. 404页面突然全是“爬虫”:域名“走错门”了
很多人遇到“所有页面404”,第一反应是后端代码问题。但通过日志看,若$request里的路径都是“/wp-admin”“/admin”,且User-Agent全是“Python-urllib”或“Baiduspider”,说明:
- 域名根目录被改到错误位置(比如nginx配置里的
root指令指向了空目录); - 或
location规则冲突,爬虫请求被错误拦截到404页面。
解决办法:先检查nginx的root和index配置,再用grep筛选异常请求:
grep "404" access.log | grep "Python-urllib" | wc -l # 统计爬虫404数量
2. 页面突然“打不开”(502/503错误):域名“被卡脖子”了
502 Bad Gateway通常是后端服务器(如PHP-FPM、Node.js)“罢工”,但503 Service Unavailable可能是nginx自己“关门”了。这时候看error.log:
- 若出现
upstream timed out,说明后端服务器响应太慢(比如数据库连不上); - 若出现
connect() failed,可能是域名的反向代理(proxy_pass)配置了错误地址。

排查技巧:用$request_time字段看请求耗时,若超过5秒还没返回200,基本是后端问题;若耗时正常但报503,则可能是nginx的limit_req限流规则触发了。
3. HTTPS页面“打不开”:SSL证书“过期”或“没配好”
HTTPS域名若出现“访问失败”,先查error.log里的SSL错误:
SSL certificate problem: self signed certificate:证书自签没效,浏览器不认;SSL handshake failed:后端服务器(如Tomcat)的SSL配置和前端域名不匹配。
快速验证:用curl -I https://域名,若返回HTTP/1.1 200 OK,说明证书没问题;若返回400,可能是nginx的listen 443配置里ssl_certificate路径错了。
三、3个“日志分析工具”,让域名健康可视化
1. goaccess:1行命令生成“访问热力图”
安装后直接解析日志:
goaccess /var/log/nginx/access.log -o report.html --html-report-title "域名访问报告"
打开生成的HTML,能直观看到:
- 哪个时间段访问量最高(可能是SEO优化的流量高峰);
- 异常IP分布(DDoS攻击的IP集中区);
- 最常访问的路径(判断用户是否“走错门”)。
2. ELK Stack:日志“仪表盘”实时监控
如果域名是企业级网站,建议用ELK(Elasticsearch+Logstash+Kibana)搭建日志分析平台:
- Logstash过滤nginx日志;
- Elasticsearch存储日志;
- Kibana生成“域名健康仪表盘”,异常请求自动标红。
3. 简单脚本:每天生成“域名健康小结”
用Shell脚本定时分析关键指标,比如:
#!/bin/bash
DATE=$(date +%Y%m%d)
# 统计当天404错误数量
ERROR404=$(grep "$(date +%d/%b/%Y)" /var/log/nginx/access.log | grep "404" | wc -l)
# 记录到健康报告
echo "日期:$DATE 404错误数:$ERROR404" >> domain_health.log
定期检查domain_health.log,若错误数突增,立刻启动排查。
四、最后一句话:日志是域名的“DNA”,读懂它就能少踩坑
域名就像一个“店铺”,nginx日志就是“门口监控”。访问量低可能是“门面冷清”(SEO问题),打不开可能是“大门锁了”(配置错误),被攻击可能是“门口有小偷”(爬虫/黑客)。
下次再遇到域名“闹脾气”,别先慌着重启服务器。打开nginx日志文件夹,看看最近谁来过、做了什么——那些被忽略的字段,或许就是解决问题的关键。毕竟,运维的核心不是“猜”,而是“看数据说话”。

上一篇





