Apache ProxyPass按路径分流需严格遵循从具体到宽泛的规则顺序,每条ProxyPass必须配对ProxyPassReverse,路径末尾斜杠须一致,并用封装、启用mod_proxy等模块及ProxyPreserveHost On、ProxyRequests Off。
apache mod_proxy 实现按路径分流请求,核心是用 proxypass 指令配合严格路径顺序与配套设置。它不靠智能识别,而是靠前缀匹配和配置顺序精准控制——写对了就稳,写乱了就失效。
路径规则必须从具体到宽泛
Apache 自上而下逐行匹配,一旦命中就停止。所以更长、更具体的路径要写在前面,否则会被宽泛规则提前截断:
-
正确写法(推荐):
ProxyPass /api/v2/ http://svc-v2:8080/
ProxyPass /api/users/ http://user-svc:8000/
ProxyPass /api/orders/ http://order-svc:8001/
ProxyPass /api/ http://fallback-api:8082/ -
错误写法(/api/ 写太前):
ProxyPass /api/ http://fallback-api:8082/
ProxyPass /api/v2/ http://svc-v2:8080/ ← 这条永远不会生效
每条 ProxyPass 都要配 ProxyPassReverse
后端返回的 Location、Set-Cookie 等响应头里常含内部地址或路径,不修正会导致重定向跳错、登录态丢失:
- ProxyPass /api/users/ http://user-svc:8000/ 必须紧跟着
ProxyPassReverse /api/users/ http://user-svc:8000/ - 两端路径末尾斜杠必须一致:都带 /,否则请求路径可能被重复拼接(如 /api/users//profile)
用 封装提升可维护性
把同一组逻辑(路径 + 后端 + 反向修正)放进
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
<location><br> ProxyPass http://user-svc:8000/<br> ProxyPassReverse http://user-svc:8000/<br></location>
基础模块和关键开关不能漏
缺模块或基础配置会导致 503、404 或代理静默失败:
- 确认已启用:mod_proxy、mod_proxy_http(HTTP/HTTPS 必需)
- 虚拟主机内加上:ProxyPreserveHost On(让后端看到原始 Host,利于日志和鉴权)
- 务必设置:ProxyRequests Off(禁用正向代理,安全必需)










