You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache负载均衡器无法区分不同子域名,请求路由异常求助

Apache负载均衡器无法区分不同子域名,请求路由异常求助

Hi,我看了你的配置和问题描述,核心问题其实很明确——你的负载均衡器没有把客户端请求的Host头正确传递给后端服务器,导致后端Apache没法识别是哪个子域名的请求,最终都落到主站的配置上了。

问题根源

默认情况下,Apache反向代理会把请求的Host头替换成后端服务器的IP或主机名(比如你的172.16.111.10)。后端Apache收到这个Host头后,找不到对应的子域名VirtualHost配置,就会使用默认的主站配置(也就是/var/www/example),这就是为什么不管你访问哪个子域名,都返回主站内容。

解决方案

你只需要在所有涉及反向代理的VirtualHost块中添加ProxyPreserveHost On指令,这个指令会让负载均衡器把客户端实际请求的Host头(比如games.example.com)原样转发给后端服务器,这样后端就能正确匹配对应的子域名配置了。

修改后的主域名VirtualHost配置示例:

#Main domain
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName www.example.com
ServerAlias example.com
ServerAdmin webmaster@localhost
ProxyPreserveHost On  # 新增这一行,关键!
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/

<Location "/balancer-manager">
SetHandler balancer-manager
Require host localhost
</Location>

<Location "/server-status">
SetHandler server-status
Require host localhost
</Location>
</VirtualHost>

你的子域名VirtualHost已经加了ProxyPreserveHost On,保持不变即可。

额外验证步骤

  • 确认必要模块已加载:运行apache2ctl -M(Debian/Ubuntu)或httpd -M(RHEL/CentOS),检查是否存在proxy、proxy_http、proxy_balancer、slotmem_shm这些模块,没有的话需要启用它们。
  • 重新加载Apache配置:修改完配置后,执行systemctl reload apache2(或对应系统的重载命令),确保配置生效。
  • 快速测试Host头传递:可以用curl -H "Host: games.example.com" https://<负载均衡器IP>测试,看返回的内容是否是游戏站的内容,以此验证Host头是否正确传递。

备注:内容来源于stack exchange,提问作者Mohammed Yaseen Ahammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:24:30