apache代理可通过块嵌套limitexcept指令,在反向代理入口层拦截put、delete、trace等非必要http方法,结合traceenable off和禁用mod_dav模块,实现405/403响应的前置防护。

Apache 代理本身不直接“过滤”HTTP方法,但可通过反向代理(mod_proxy)配合访问控制指令,在代理入口层拦截并拒绝不安全方法(如 PUT、DELETE、TRACE、OPTIONS、PROPFIND 等),从而在请求到达后端服务前就切断风险路径。关键不是靠代理模块过滤,而是把代理配置和权限控制结合使用。
在 Proxy 配置块中嵌套 LimitExcept 控制方法
Apache 的 <limitexcept></limitexcept> 指令不能用于全局或 VirtualHost 顶层,但可合法用在 <location></location> 或 <proxy></proxy> 块内——这对代理场景特别实用:
- 编辑
httpd.conf或站点配置文件,确保已启用mod_proxy、mod_proxy_http和mod_authz_core(2.4+ 默认加载) - 在代理目标路径上添加
<location></location>块,例如代理所有/api/请求到后端:
<location>
ProxyPass "http://127.0.0.1:8080/api/"
ProxyPassReverse "http://127.0.0.1:8080/api/"
<limitexcept get post head>
Require all denied
</limitexcept></location>
这样,任何对 /api/ 路径发起的 PUT、DELETE、TRACE 等请求,会在 Apache 代理层直接返回 405 Method Not Allowed,根本不会转发给后端。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
禁用 TRACE 并关闭 WebDAV 相关模块
即使没显式启用 WebDAV,XAMPP 或某些 Apache 发行版默认加载了 mod_dav.so 和 mod_dav_fs.so,它们会响应 PROPFIND、MKCOL 等方法,绕过 LimitExcept。必须彻底禁用:
- 打开
httpd.conf,搜索并注释这两行: #LoadModule dav_module modules/mod_dav.so#LoadModule dav_fs_module modules/mod_dav_fs.so- 同时确认没有残留的
<ifmodule dav_module></ifmodule>配置块,有则一并注释 - 在配置文件任意全局位置(不在任何块内)添加:
TraceEnable off
验证代理层是否真正生效
重启 Apache 后,用 curl 测试代理路径(而非后端直连地址):
-
curl -I http://localhost/api/→ 检查响应头不含Allow:中的危险方法 -
curl -X DELETE http://localhost/api/test→ 应返回405(不是 403 或 500) -
curl -X TRACE http://localhost/api/→ 应返回403或501 -
curl -X PROPFIND http://localhost/api/→ 应返回501 Not Implemented,而非207 Multi-Status
注意代理与后端方法策略的一致性
如果后端服务(如 Spring Boot、Node.js)本身也开放了 PUT/DELETE,仅靠 Apache 代理层限制是安全的第一道防线;但建议后端也做白名单校验,避免绕过代理直连时暴露风险。代理层的 LimitExcept 是最轻量、最可控的统一入口管控方式,无需修改业务代码。










