Nginx 默认 stub_status 模块不支持状态码统计,需结合访问日志(如 awk 分析)或第三方模块(如 nginx-module-vts)实现;推荐日常用日志+awk,长期监控用 vts 模块。

要让 Nginx 提供状态码统计功能,不能只靠内置的 stub_status 模块——它只显示连接数、请求数等基础运行指标,不输出 HTTP 状态码分布。真正支持按状态码(如 200、404、502)分类统计的,需要结合访问日志分析,或使用第三方模块。
方法一:用日志 + awk 快速统计状态码(推荐,无需改模块)
这是最常用、零依赖的方式,适合日常排查和定时检查:
- 确保 Nginx 日志格式包含状态码字段(默认
$status已存在,无需额外配置) - 执行命令统计全部状态码出现次数(按降序排列):
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn - 快速查看最近 1 小时内 404 请求的 URL:
awk -v d="$(date -d '1 hour ago' '+%d/%b/%Y:%H')" '$4 ~ d {if($9==404) print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 - 注意:日志路径需替换成你实际配置的
access_log路径(如/usr/local/nginx/logs/access.log)
方法二:启用 nginx-module-vts 模块(可视化 + 实时状态码统计)
如果需要网页界面实时看到各状态码占比、每秒分布、按虚拟主机/路径细分,建议添加第三方模块 nginx-module-vts:
- 编译时加入模块:
./configure --add-module=/path/to/nginx-module-vts ... - 在
http或server块中添加:
location /status {<br> vhost_traffic_status on;<br> vhost_traffic_status_display on;<br> vhost_traffic_status_display_format html;<br>} - 重启后访问
http://your-server/status,页面底部的 Status Code 区域会列出 2xx/3xx/4xx/5xx 的实时计数与比例 - 还支持 JSON 接口(
/status/format/json),方便接入 Prometheus 或 Grafana
方法三:用 stub_status + 外部工具间接补充(不推荐单独用)
stub_status 本身不提供状态码数据,但可作为健康检查入口配合日志轮转脚本使用:
- 仅开启基础状态页(用于监控连通性):
location /nginx_status {<br> stub_status;<br> allow 127.0.0.1;<br> deny all;<br>} - 搭配定时任务(如 cron),每 5 分钟执行一次状态码统计并写入临时文件,再由前端读取展示
- 这种组合适合已有监控体系但不想引入新模块的场景
状态码统计的核心不在 Nginx 配置本身,而在日志解析逻辑或扩展模块能力。日常运维优先用 awk;长期监控建议上 vts 模块。


















