apache用mod_proxy配置域名虚拟主机,本质是通过virtualhost按域名区分并用proxypass代理请求;需启用mod_proxy、mod_proxy_http、mod_ssl(https时)和mod_proxy_wstunnel(websocket时),各virtualhost中必须配置proxypreservehost on及路径一致的proxypass/proxypassreverse规则。
apache 用 mod_proxy 配置域名虚拟主机,本质是把“按域名区分站点”和“把请求转发给后端服务”两件事合起来做:每个 <virtualhost></virtualhost> 绑定一个域名(如 admin.example.com),内部不放静态文件,而是用 proxypass 把所有请求代理出去。
启用必要模块
缺一不可,否则配置会静默失效:
-
mod_proxy:代理功能主模块 -
mod_proxy_http:支持 HTTP/HTTPS 后端通信 -
mod_ssl:若处理 HTTPS 请求或代理wss://必须启用 -
mod_proxy_wstunnel:WebSocket(如/ws/)需显式支持
Debian/Ubuntu 执行:sudo a2enmod proxy proxy_http ssl proxy_wstunnel
CentOS/RHEL 检查 /etc/httpd/conf.modules.d/ 下是否加载对应 LoadModule 行,确认后重启 Apache。
为每个域名写独立 VirtualHost
不能多个域名共用一个 <virtualhost></virtualhost> 块,必须一一对应:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 用
ServerName明确指定主域名(如api.example.com) - 可选加
ServerAlias支持别名(如www.api.example.com) - 必须设
ProxyPreserveHost On,让后端收到原始 Host 头,避免日志错乱或链接生成异常 - 加
ProxyRequests Off禁用正向代理,只做反向用途
正确写 ProxyPass 和 ProxyPassReverse
路径斜杠是高频出错点,直接影响资源加载:
- 想把
admin.example.com/全部代理到http://127.0.0.1:3001/,写法是:ProxyPass / http://127.0.0.1:3001/ProxyPassReverse / http://127.0.0.1:3001/ - 两个斜杠都要有——前面的
/是匹配路径前缀,后面的/是拼接目标路径的起点 - 若后端服务实际部署在
/admin/子路径下,代理路径也必须对齐:ProxyPass / http://127.0.0.1:3001/admin/ProxyPassReverse / http://127.0.0.1:3001/admin/ - 缺少
ProxyPassReverse会导致后端返回 302 重定向时,Location 头仍含内网地址,用户访问失败
补充关键透传项(现代应用必需)
仅靠基础代理无法满足真实业务场景:
-
WebSocket:在同个
<virtualhost></virtualhost>内单独配置:ProxyPass /ws/ ws://127.0.0.1:9000/ws/ProxyPassReverse /ws/ ws://127.0.0.1:9000/ws/ -
真实客户端 IP:后端默认看到的是 Apache 本机 IP,加这行透传:
RequestHeader set X-Real-IP %{REMOTE_ADDR}s -
HTTPS 协议标识:若 Apache 终结 HTTPS,后端需知道原始是 HTTPS 请求:
RequestHeader set X-Forwarded-Proto "https"










