Apache ProxyPass需配合认证、IP限源、签名校验、头清理、限流熔断及可观测性等多重防护才可安全代理外部API,缺一不可。

Apache 的 ProxyPass 本身不提供安全能力,必须配合认证、校验、头过滤和访问控制共同使用,才能安全代理外部合作伙伴的 API 请求。
严格限定来源与身份验证
仅允许已知 IP 段或域名发起请求,拒绝一切未授权调用:
- 在
Location或VirtualHost中启用Require ip,例如:Require ip 203.0.113.0/24 198.51.100.42 - 若合作伙伴使用域名访问,结合
mod_remoteip解析真实客户端 IP,并启用RemoteIPHeader X-Forwarded-For;务必确认上游已清洗该头,防止伪造 - 强制要求携带有效签名头(如
X-Partner-Signature),用mod_security或自定义 Lua 脚本校验 HMAC-SHA256(密钥不硬编码,通过环境变量注入)
重写与清理请求头
防止敏感头透传、避免信息泄露或被滥用:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 清除原始客户端可能注入的危险头:
RequestHeader unset AuthorizationRequestHeader unset CookieRequestHeader unset X-Real-IP - 添加可信标识头供后端识别来源:
RequestHeader set X-Partner-ID "partner-abc"RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e" - 禁用
ProxyPassReverse自动重写Location头,改用显式配置,防止后端返回恶意跳转
限流与熔断基础防护
即使合作伙伴合法,突发流量也可能压垮你的网关或下游:
- 用
mod_ratelimit或mod_evasive对每个X-Partner-ID做独立限流,例如:SetEnvIf X-Partner-ID "partner-abc" rate-limitLimitRate 100(单位:KB/s) - 配置超时参数防堆积:
ProxyTimeout 15ProxyBadHeader IgnoreProxyBadHeader IsError - 对关键路径(如支付回调)启用
mod_proxy_hcheck健康检查,失败自动摘除后端节点
日志与可观测性闭环
所有代理行为必须可追溯、可审计、可告警:
- 定制 LogFormat,记录 Partner ID、响应时间、状态码、字节数和客户端真实 IP:
LogFormat "%t %h %{X-Partner-ID}i %>s %D %B" partner_log - 将日志接入集中平台(如 Loki + Grafana),设置规则:单 Partner 5 分钟内错误率 >3% 或平均延迟 >800ms 时触发告警
- 定期导出并核验 Partner 调用量是否符合合同约定配额,偏差超 10% 自动通知对接人

















