apache反向代理转发多版本服务的核心是通过proxypass/proxypassreverse成对配置实现路径或子域名精准路由,确保响应头、重定向及cookie路径正确回传;推荐按路径(如/v1/→v1.2)或子域名(如v1.example.com→:3001)区分版本,并需注意斜杠一致性、proxypreservehost、ssl证书、cookie路径修正及balancer健康检查。

Apache 反向代理转发多版本服务,核心是把同一域名下不同路径或子域名的请求,精准路由到对应版本的后端服务(如 /v1/ → v1.2 服务,/v2/ → v2.5 服务),同时确保响应头、重定向地址、Cookie 路径等正确回传,避免资源加载失败或会话错乱。
按路径区分版本(推荐用于 API 或管理后台)
适合版本间共用域名、通过 URL 路径标识(如 https://api.example.com/v1/users、https://api.example.com/v2/users)。关键在于 ProxyPass 和 ProxyPassReverse 成对配置,并注意路径末尾斜杠一致性:
-
ProxyPass /v1/ http://127.0.0.1:8081/—— 注意末尾/,表示将/v1/xxx映射为后端的/xxx -
ProxyPassReverse /v1/ http://127.0.0.1:8081/—— 修正后端返回的Location、Set-Cookie等响应头中的路径 - 多个版本并列配置,互不干扰:
/v2/ → :8082、/beta/ → :8090 - 若后端服务自身不处理路径前缀(比如它期望根路径
/),则不能加路径前缀,而需用RewriteRule剥离再代理
按子域名区分版本(适合完整独立站点)
适用于每个版本都像一个独立站点(如 v1.example.com、v2.example.com)。需在 DNS 解析全部指向同一服务器,并在 Apache 中用 VirtualHost 按 ServerName 匹配:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 每个
<virtualhost></virtualhost>块指定唯一ServerName v1.example.com - 启用
ProxyPreserveHost On,让后端收到原始 Host 头(便于日志、路由识别) - 直接
ProxyPass / http://127.0.0.1:3001/,无需路径修饰 - HTTPS 场景必须为每个子域名配置独立 SSL 证书(可用通配符证书或 Let's Encrypt 多域名证书)
共享 Session 或静态资源时的关键处理
当多个版本共用登录态或 CDN 资源时,容易因 Cookie 路径、CORS 或 Referer 校验出错。需针对性调整:
- 若统一认证中心在
/auth,所有版本需配置相同Path=/的 Cookie,且ProxyPassReverseCookiePath确保路径一致 - 后端返回的
Access-Control-Allow-Origin若写死为某个域名,需用Header edit动态替换 - 前端构建时,确保
publicPath或assetPrefix与代理路径匹配(例如 v2 版本资源放在/v2/static/,而非默认/static/)
健康检查与平滑切换(上线/回滚必备)
生产环境切换版本不能靠停服务,应借助 mod_proxy_balancer 实现灰度和快速回切:
- 把同一版本的多个实例注册为 balancer 成员,用
status=+H标记为热备 - 用
balancer-manager页面手动启停某版本节点,或配合脚本调用 HTTP 接口控制 - 配合
ProxySet retry=10和timeout=5,让故障版本自动隔离,不影响其他版本流量










