ProxyPass / 实现根目录转发需严格匹配末尾斜杠、确保置于所有具体规则之后、并配对 ProxyPassReverse 和 ProxyPreserveHost;缺斜杠会导致路径拼接错误,顺序错乱会拦截其他规则,不修正响应头将暴露内网或跳转失败。直接用 `ProxyPass /` 就能实现根目录转发,但必须注意路径末尾斜杠、匹配顺序和响应头重写三个关键点。
路径末尾斜杠必须严格一致
apache 的 `proxypass` 按字符串前缀匹配,斜杠是路径语义的一部分。例如:
-
正确(推荐):
ProxyPass / http://127.0.0.1:8080/→ 请求/api/user转发为http://127.0.0.1:8080/api/user -
错误(易出错):
ProxyPass / http://127.0.0.1:8080(缺末尾斜杠)→ 同样请求会变成http://127.0.0.1:8080api/user,404
后端服务若部署在子路径(如 Tomcat 的 /myapp),则应写成:ProxyPass / http://127.0.0.1:8080/myapp/,并确保后端应用的 publicPath 或 contextPath 与之对齐。
必须放在所有具体路径规则之后
根目录规则 / 匹配最宽泛,一旦提前出现,会拦截所有请求,导致其他 ProxyPass 规则失效。正确顺序示例:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
ProxyPass /admin/ http://admin-svc:9000/ProxyPass /api/ http://api-svc:8000/-
ProxyPass /static/ !(排除静态资源) -
ProxyPass / http://web-svc:3000/← 最后兜底
务必配套 ProxyPassReverse 和 ProxyPreserveHost
仅转发请求不够,还需处理响应中的重定向和链接:
-
ProxyPassReverse / http://127.0.0.1:8080/:改写响应头中Location、Content-Location等 URL,避免暴露内网地址或跳转失败 -
ProxyPreserveHost On:把原始请求的Host头传给后端,让后端生成的绝对链接(如邮件中的 URL)保持对外域名一致 -
ProxyRequests Off:禁用正向代理,防止被滥用
HTTPS 后端需额外启用 SSL 支持
若目标地址是 https://,必须启用 mod_proxy_connect 并开启 SSL 代理:
- 确认加载了:
LoadModule proxy_connect_module modules/mod_proxy_connect.so - 在虚拟主机中添加:
SSLProxyEngine On - 如遇证书校验问题,可加:
SSLProxyVerify none和SSLProxyCheckPeerCN off(仅限测试环境)










