ProxyPass本身不负责过滤非法请求,真正起过滤作用的是其他模块:用LimitExcept白名单限制方法、mod_rewrite拦截危险参数、mod_security做深度内容过滤,并配合ProxyPassReverse净化响应头。

ProxyPass 本身不负责过滤非法请求,它只做路径转发。真正起过滤作用的是 Apache 的其他模块和配置机制——必须在 ProxyPass 执行前或同时,叠加请求校验与拦截逻辑。
用 白名单限制请求方法
这是最直接、最底层的防护方式,适用于所有代理路径。它在请求进入代理逻辑前就拒绝非法方法:
- 在
<Location>或<VirtualHost>块中配置,例如针对/api/路径: <Location "/api/"><LimitExcept GET HEAD POST>Require all denied</LimitExcept>- 务必显式包含
HEAD(健康检查、缓存验证依赖);若需 CORS,OPTIONS也必须加入白名单。
用 mod_rewrite 在代理前拦截危险参数或路径
适合对 URL、查询参数、请求头做轻量级清洗,作为第一道防线:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 启用
mod_rewrite后,在<VirtualHost>或<Location>中添加规则: - 拦截含敏感路径的请求:
RewriteCond %{REQUEST_URI} .(env|xml|passwd|htaccess) [NC]→RewriteRule ^ - [F] - 拒绝空或异常 token:
RewriteCond %{QUERY_STRING} (?:^|&)token=(&|$|[[:space:]]|%)→RewriteRule ^ - [F] - 注意:规则要放在
ProxyPass之前,确保先拦截再转发。
用 mod_security 做深度内容过滤
当需要结构化规则(如正则匹配、参数类型校验、SQLi/XSS 检测)时,mod_security 是更可靠的选择:
- 为代理路径单独定义规则链,例如:
SecRule REQUEST_URI "@rx /api/v2/admin/.*" "id:1001,phase:1,deny,status:403"SecRule ARGS:token "@rx ^[\s]*$|^\S+\s+\S+" "id:1002,phase:2,deny,status:403"- 规则生效位置在请求解析阶段(phase 1/2),早于 ProxyPass,能有效阻断恶意载荷。
- 建议配合 CRS(OWASP ModSecurity Core Rule Set)使用,避免从零编写规则。
配合 ProxyPassReverse 做响应头净化
转发后还需防范后端返回的非法响应头或重定向跳转:
-
ProxyPassReverse自动修正Location、Set-Cookie Domain等头,防止泄露内网地址或跨域风险; - 用
Header unset清除后端返回的危险头,例如:Header unset Server、Header unset X-Powered-By; - 对
Set-Cookie加强控制:Header edit Set-Cookie "(?i)^((?!Secure|HttpOnly).*)$" "$1; Secure; HttpOnly"。

















