启用 mod_status 需确认模块加载、配置 并设 Require local,重启后访问 http://localhost/server-status;加 ?auto 参数可获机器可读数据;生产环境禁用 ExtendedStatus 以防性能下降。

mod_status 能直接暴露 Apache 的实时工作状态,但默认不启用、不安全、不直观——必须手动配置访问控制和输出格式,否则要么 403,要么泄露敏感信息。
如何启用 mod_status 并让 localhost 可访问
Apache 通常已编译包含 mod_status,但模块未启用或
httpd -M | grep status
若无输出,需在配置中启用(如 LoadModule status_module modules/mod_status.so)。接着在主配置或虚拟主机内添加:
<location>
SetHandler server-status
Require local
</location>
注意:Require local 仅允许 127.0.0.1 和 ::1 访问;生产环境切勿用 Require all granted。重启后访问 http://localhost/server-status 即可看到基础状态页。
为什么访问 /server-status 返回 403 或空白页
常见原因有三个:模块未加载、SetHandler 缺失、或访问控制拒绝。特别注意 Apache 2.4+ 的权限语法已变更——旧版的 Order deny,allow + Allow from 127.0.0.1 在新版本下完全无效,会静默拒接请求。
- 检查错误日志:
tail -f logs/error_log,典型报错是client denied by server configuration -
Require指令必须出现在有效的上下文(如、 )中,不能放在 .htaccess 里 - 如果使用反向代理,需确保
X-Forwarded-For不被误判;此时改用Require ip 192.168.1.0/24更可靠
怎样获取机器可读的实时数据(用于脚本或监控系统)
加 ?auto 参数即可返回纯文本格式,适合 curl 解析或 Prometheus 抓取:
curl "http://localhost/server-status?auto"
输出类似:
ServerVersion: Apache/2.4.52 (Ubuntu) ServerUptimeSeconds: 12485 Total Accesses: 2841 Total kBytes: 12345 CPULoad: 0.123456 Uptime: 12485 ReqPerSec: 0.2276 BytesPerSec: 1024.5 BytesPerReq: 4523.1 BusyWorkers: 3 IdleWorkers: 17 ...
关键点:
-
BusyWorkers和IdleWorkers反映当前连接压力,比单纯看请求数更准 -
CPULoad是 Apache 内部估算值,非系统级 loadavg,仅作趋势参考 - 该接口无认证,务必限制网络可达范围,或配合
Require ip+ 监控端专用 IP
为什么 ExtendedStatus 开启后性能下降明显
ExtendedStatus On 会让 Apache 记录每个请求的完整路径、VHost、响应码等,显著增加内存与 CPU 开销,尤其在高并发时可能拖慢整体响应。
默认 ExtendedStatus 是 Off,/server-status?auto 也只返回基础指标。只有明确需要 per-request 统计(如调试慢请求分布),才在配置中显式开启:
ExtendedStatus On
且建议仅在调试期临时启用,上线监控应保持关闭。若真需细粒度分析,用 mod_log_forensic 或接入 access_log + ELK 更稳妥。
别忽略 Require 的作用域细节:它依赖于 Apache 的访问控制执行顺序,放在










