Apache反向代理可实现多站点统一入口,分三类:①统一域名+不同路径,用ProxyPass/ProxyPassReverse按路径转发;②统一IP+不同子域名,各VirtualHost按Host头匹配并启用ProxyPreserveHost;③HTTPS场景需独立443配置、证书及80重定向,内网可禁用后端证书校验。

要利用 Apache 代理实现多站点的统一入口,核心是用反向代理(Reverse Proxy)把同一个域名(或 IP)下的不同路径或子域名,分别转发到后端不同端口、不同服务的应用上,对外只暴露一个访问地址。这不是靠 DocumentRoot 指向多个本地目录,而是让 Apache 充当“流量调度员”。
以下分三类常见统一入口场景说明,每种都给出关键配置要点和注意事项:
统一域名 + 不同路径(如 example.com/app1、example.com/app2)
适合将 Jenkins、Gerrit、Prometheus 等各自监听不同端口的服务,通过路径区分。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:80>
ServerName example.com
# 代理 /jenkins → 后端 http://localhost:8080/jenkins
ProxyPass /jenkins http://127.0.0.1:8080/jenkins
ProxyPassReverse /jenkins http://127.0.0.1:8080/jenkins
# 代理 /gerrit → 后端 http://localhost:8081
ProxyPass /gerrit http://127.0.0.1:8081
ProxyPassReverse /gerrit http://127.0.0.1:8081
# 主站可保留静态内容或再代理其他服务
DocumentRoot /var/www/html
</VirtualHost>-
ProxyPassReverse必须与ProxyPass路径严格一致,否则重定向响应头里的 Location 会出错。 - 若后端应用本身不支持子路径部署(如 Jenkins 默认期望根路径),需配合其配置项(如 Jenkins 的
--prefix=/jenkins)或使用ProxyPassMatch配合重写。
统一 IP/域名 + 不同子域名(如 jenkins.example.com、gerrit.example.com)
更清晰、更常用,每个子域名独立对应一个服务,用户感知隔离性强。
<VirtualHost *:80>
ServerName jenkins.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName gerrit.example.com
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8081/
ProxyPassReverse / http://127.0.0.1:8081/
</VirtualHost>- 每个
<VirtualHost>块独立生效,Apache 根据请求头中的Host字段自动匹配。 -
ProxyPreserveHost On很关键:确保后端服务收到的 Host 头仍是jenkins.example.com,便于生成正确链接、处理 cookie 域名等。 - DNS 或本地
/etc/hosts需提前将jenkins.example.com和gerrit.example.com解析到同一台 Apache 服务器 IP。
统一入口 + HTTPS 全站加密
HTTP 和 HTTPS 必须分开配置两个 <VirtualHost>,不能合并。
<VirtualHost *:443>
ServerName jenkins.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/jenkins.crt
SSLCertificateKeyFile /etc/ssl/private/jenkins.key
ProxyPreserveHost On
ProxyPass / https://127.0.0.1:8443/
ProxyPassReverse / https://127.0.0.1:8443/
</VirtualHost>
# 同时建议加 80 → 443 重定向
<VirtualHost *:80>
ServerName jenkins.example.com
Redirect permanent / https://jenkins.example.com/
</VirtualHost>- 后端若也用 HTTPS(如
https://127.0.0.1:8443),Apache 需启用mod_ssl并可能需配置SSLProxyVerify none和SSLProxyCheckPeerCN off(仅限内网可信环境,避免证书校验失败)。 - 证书路径必须真实存在且 Apache 进程有读取权限(如
www-data用户)。
不复杂但容易忽略

















