mod_info模块通过/server-info接口提供Apache配置详情,需加载模块、配置Location路径、限制IP访问,并用?mod_name等参数精准查看指定模块参数。

直接通过 /server-info 接口就能在线查看 Apache 所有已加载模块的详细参数,但前提是模块已启用、路径配置正确,且访问权限合理开放。关键不在于“能不能看”,而在于“怎么看全、怎么看准、怎么看安全”。
确认 mod_info 模块已加载并启用
Apache 必须实际加载了 mod_info,否则请求会返回 404 或 403。检查方式如下:
- 运行
httpd -M | grep info(Linux/macOS)或apache2ctl -M | grep info,输出中应含info_module (shared)或类似内容 - 若无输出,需编辑
httpd.conf或apache2.conf,取消注释或添加:LoadModule info_module modules/mod_info.so - 保存后执行
sudo systemctl reload apache2(Debian/Ubuntu)或sudo apachectl graceful(RHEL/CentOS)生效
配置可访问的 server-info 路径
仅加载模块还不够,必须显式声明处理路径。在主配置文件(如 httpd.conf)或 conf/extra/httpd-info.conf 中加入:
<Location "/server-info"><br> SetHandler server-info<br></Location>
该配置告诉 Apache:所有对 /server-info 的请求,都交由 mod_info 模块处理。注意路径末尾不加斜杠,大小写敏感。
限制访问确保不泄露敏感信息
默认配置下,/server-info 可能暴露系统路径、数据库连接串、认证凭据等——这些信息常藏在其他模块(如 mod_php、mod_proxy、mod_ssl)的配置中。务必加访问控制:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 推荐只允许可信 IP,例如本机 + 运维工作站:
<Location "/server-info"><br> SetHandler server-info<br> Require ip 127.0.0.1<br> Require ip 192.168.1.17<br></Location>
- 禁用全局开放(
Require all granted)或域名白名单(Require host example.com),除非内网环境严格隔离 - 切勿在生产环境的
.htaccess中启用该路径,因 mod_info 的 handler 能力会穿透到所有目录级配置,风险不可控
用 URL 参数精准筛选模块参数
直接访问 http://your-server/server-info 显示的是全部模块概览,信息量大但不易聚焦。可通过查询参数快速定位目标模块的完整配置细节:
-
?config:列出当前生效的所有配置指令(不含模块说明,纯配置文本) -
?list:只显示已启用模块名称列表,用于快速核对是否加载了预期模块 -
?hooks:查看各模块注册的 Apache 生命周期钩子(如post_config,child_init) -
?mod_ssl(替换为任意模块名):仅显示mod_ssl模块支持的指令、当前配置值、实现的钩子及关联的配置段 -
?server:仅显示基础服务器信息(版本、编译时间、启动时间等)
例如审计 mod_rewrite 是否启用了 FollowSymLinks 或自定义规则,直接访问 /server-info?mod_rewrite 即可看到其所有已应用的 Rewrite* 指令和上下文。
注意信息时效性与可见范围限制
mod_info 展示的是 Apache 当前解析后的配置树,不是原始配置文件。这意味着:
- 动态指令(如
ServerRoot、LoadModule)不会出现在?config输出中 -
<ifmodule></ifmodule>、<ifdefine></ifdefine>等条件块内的指令,仅当条件为真时才被纳入展示 -
.htaccess文件中的配置默认不显示——mod_info 不读取运行时目录级文件 - 如果修改过配置但未重载服务,页面显示仍是旧配置;务必确认
systemctl status apache2显示最近 reload 时间有效
不复杂但容易忽略。

















