Apache中用ProxyPass实现多域名绑定,本质是通过VirtualHost按Host头区分域名并反向代理至不同后端服务,需启用mod_proxy等模块,配置ProxyPreserveHost、ProxyPass/ProxyPassReverse、WebSocket支持及X-Forwarded头透传,确保路径、协议、IP与重定向正确。
apache 中用 proxypass 实现多域名绑定,本质是让不同域名(如 api.example.com、admin.example.com)各自指向后端不同服务,而不是共用同一套静态文件。它不依赖 documentroot,而是靠 host 头识别域名,再通过反向代理把请求转发出去。
按域名分 VirtualHost,每个配独立 ProxyPass
每个子域或主域名必须有专属的 <VirtualHost> 块,不能多个域名挤在一个块里混用:
- 每个块中写明
ServerName(如ServerName api.example.com),这是匹配请求 Host 头的关键 - 启用
ProxyPreserveHost On,确保后端收到的 Host 头仍是原始域名,避免后端生成错误链接或鉴权失败 - 关闭正向代理:
ProxyRequests Off,只允许反向代理行为 - 必须加载必要模块:
mod_proxy、mod_proxy_http;若需 WebSocket,还要加mod_proxy_wstunnel
路径与后端地址的斜杠要严格对齐
ProxyPass 的路径拼接规则很敏感,末尾斜杠决定是否自动补前缀:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 正确写法(前后都带
/):ProxyPass / http://127.0.0.1:3001/→ 请求/user转发为http://127.0.0.1:3001/user - 错误写法(缺后斜杠):
ProxyPass / http://127.0.0.1:3001→ 请求/user变成http://127.0.0.1:3001user,404 - 务必同步配置
ProxyPassReverse / http://127.0.0.1:3001/,否则后端返回 302 重定向时,Location 头仍含内部地址
透传关键上下文:真实 IP、WebSocket、HTTPS 协议
默认情况下,后端看到的是 Apache 的本地 IP,且 WebSocket 和 HTTPS 信息容易丢失:
- 添加头传递真实客户端 IP:
RequestHeader set X-Real-IP %{REMOTE_ADDR}s - WebSocket 需显式声明:
ProxyPass /ws/ ws://127.0.0.1:9000/ws/+ProxyPassReverse /ws/ ws://127.0.0.1:9000/ws/ - HTTPS 场景下,后端可能需要知道原始协议,可加:
RequestHeader set X-Forwarded-Proto "https"(HTTP 块则设为"http")
HTTPS 域名绑定不能省略 443 独立配置
HTTP 和 HTTPS 是两个完全独立的虚拟主机,不能复用同一块配置:
- 必须另建一个
<VirtualHost *:443>块,同样写ServerName和ProxyPass - 开启 SSL:
SSLEngine on,并指定证书路径(SSLCertificateFile、SSLCertificateKeyFile) -
ServerAlias也要在 :443 块里单独写,比如支持www.api.example.com - 建议加跳转规则,把 HTTP 自动重定向到 HTTPS,例如:
Redirect permanent / https://api.example.com/

















