ProxyPass规则须写在<VirtualHost>块内,核心是路径匹配精准、模块启用完整、前后斜杠一致;需启用mod_proxy.so、mod_proxy_http.so等模块,按从长到短顺序配置,ProxyPass与ProxyPassReverse路径斜杠必须严格配对,并开启ProxyPreserveHost及X-Forwarded头透传。

ProxyPass 规则要写在 `
必须先启用代理模块
Apache 默认不开启代理功能,需在 `httpd.conf` 中确认以下模块已加载(取消注释):
- mod_proxy.so —— 代理基础框架
- mod_proxy_http.so —— 处理 HTTP/HTTPS 后端(漏掉会导致 503 或 404)
-
mod_proxy_connect.so —— 若后端是 HTTPS,必须启用,并配合
SSLProxyEngine on - mod_headers.so —— 后续加自定义头或 CORS 时需要
路径规则顺序很关键
Apache 按配置从上到下匹配,一旦命中就停止,所以长路径必须放前面,避免被泛匹配吞掉:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- ✅ 正确顺序:
/admin/api/→/api/→/assets/→/ - ❌ 错误写法:
ProxyPass / http://fallback:3000/放最前,后面所有规则都失效 - 建议用
<Location>块提升可读性,但匹配逻辑不变
ProxyPass 和 ProxyPassReverse 必须严格配对
两者末尾斜杠必须完全一致,否则路径拼接错乱,导致后端返回的资源链接 404:
- 转发
/admin/到后端根路径:ProxyPass /admin/ http://backend:8080/ProxyPassReverse /admin/ http://backend:8080/ - 若写成
/admin/ → http://backend:8080(缺末尾斜杠),后端返回的/static/app.js会被拼成/admin/static/app.js,而实际资源在http://backend:8080/static/app.js,浏览器请求失败
透传真实信息不能少
后端默认看到的是 Apache 本机 IP 和端口,需手动补全关键头:
-
ProxyPreserveHost On—— 把原始 Host 头传过去,避免重定向出错 -
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"—— 传真实客户端 IP -
RequestHeader set X-Forwarded-Proto "https"—— 如果 Apache 终结 HTTPS -
RequestHeader set X-Forwarded-Port "443"或"80"—— 让后端构造正确绝对 URL

















