Apache禁用HTTP方法应分层处理:TRACE/TRACK优先用TraceEnable off协议级关闭;其他方法用LimitExcept白名单控制,如<LimitExcept GET HEAD>Require all denied,并须显式包含HEAD和OPTIONS以保障缓存与CORS。

Apache 限制特定请求方法,核心是分层处理:对 TRACE/TRACK 这类高危方法,优先用协议级禁用;对其他方法(如 PUT、DELETE、OPTIONS),则通过访问控制精细放行。关键不是“一刀切”,而是按需收紧、不漏关键请求。
直接关闭 TRACE 和 TRACK(推荐首选)
这是最彻底、最底层的防护方式,无需依赖模块或规则匹配:
- 在
<VirtualHost>块内(或主配置文件服务器级上下文)添加:TraceEnable off - 该指令自动禁用 TRACE 和 TRACK,且 Apache 默认不启用它们;无需额外写重写规则
- 注意:不能放在
<Directory>或.htaccess中,只支持虚拟主机或服务器级配置
用 LimitExcept 精细控制常规方法
适合管理 GET、POST、HEAD、OPTIONS 等常用方法的访问权限:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 示例:只允许 GET 和 HEAD,其余一律拒绝
<LimitExcept GET HEAD><br> Require all denied<br></LimitExcept>
- 务必包含 HEAD:浏览器缓存验证、健康检查常发此请求,漏掉会导致 405 或缓存异常
- 若需跨域,OPTIONS 必须显式加入白名单(CORS 预检依赖它),否则前端请求会失败
- Require 规则必须包裹在
<RequireAll>或<RequireAny>内,不可直接写在 LimitExcept 下
用 mod_rewrite 拦截补充(兼容旧版本或增强控制)
当需要统一拦截多个非标准方法,或 TraceEnable 不可用时使用:
- 确保
mod_rewrite已启用(检查LoadModule rewrite_module未被注释) - 在
<VirtualHost>或<Directory>中添加:RewriteEngine On<br>RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)<br>RewriteRule .* - [F] - [F] 返回 403 Forbidden,比 405 更明确表示“禁止”,且不暴露服务支持的方法列表
- 注意:Rewrite 规则在 LimitExcept 之后执行,两者叠加可能造成意外交互,建议统一收口到一种机制
验证是否生效
配置后必须实测,不能仅依赖语法检查:
- 用 curl 测试:
curl -X TRACE https://your-domain.com/应返回 403 或连接拒绝 - 用 telnet 手动发请求更可靠:
输入TRACE / HTTP/1.1后空行两次,观察响应状态码 - 前端跨域场景下,检查浏览器开发者工具 Network 标签页中 OPTIONS 请求是否成功返回 200/204
- 安全扫描工具(如 Nikto、Nmap)也可辅助确认

















