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

Apache下将两个子域名反向代理至单服务器的配置问题

解决Apache反向代理多子域名配置异常问题

我之前也踩过类似多子域名反向代理的坑,结合你的环境(三台Raspbian Stretch+Apache2.4服务器)来看,sub1正常但sub2异常,大概率是配置细节遗漏或者网络/虚拟主机匹配的问题,给你梳理几个排查和解决的方向:

第一步:检查服务器#1的sub2反向代理配置

先去服务器#1上找到sub2.otherdomain.com的虚拟主机配置文件(一般在/etc/apache2/sites-available/目录下),对比sub1的配置,重点核对以下几点:

  • ServerName是否准确设置为sub2.otherdomain.com,别写错了子域名
  • 必须加上ProxyPreserveHost On,这条指令会把原始请求的Host头传递给后端的服务器#3,否则服务器#3可能会把请求匹配到默认虚拟主机(比如跳转到otherdomain.com)
  • ProxyPass和ProxyPassReverse的目标地址是否正确指向服务器#3的IP,路径是否为/(如果不是根路径代理的话另说,但sub1正常的话应该是一致的)

正确的配置示例大概是这样:

<VirtualHost *:80>
    ServerName sub2.otherdomain.com
    # 关键:保留原始Host头传递给后端
    ProxyPreserveHost On
    # 反向代理到服务器#3的IP
    ProxyPass / http://xxx.xxx.xxx.xxx/
    ProxyPassReverse / http://xxx.xxx.xxx.xxx/
    
    ErrorLog ${APACHE_LOG_DIR}/sub2.otherdomain.com-error.log
    CustomLog ${APACHE_LOG_DIR}/sub2.otherdomain.com-access.log combined
</VirtualHost>

修改后记得重启Apache生效:sudo systemctl reload apache2

第二步:检查服务器#3的sub2虚拟主机配置

既然sub1在服务器#3上能正常运行,说明基础的proxy模块是启用的,但还是要确认sub2的虚拟主机配置没问题:

  • 确认sub2的配置文件已经被启用:执行sudo a2ensite sub2.otherdomain.com.conf(如果还没启用的话),然后重启Apache
  • 检查ServerName是否准确设置为sub2.otherdomain.com,DocumentRoot是否指向正确的网站目录,权限是否配置正确(比如Require all granted)
  • 确保服务器#3上的Apache没有把sub2的请求误匹配到其他虚拟主机(比如otherdomain.com的配置),可以把sub2的虚拟主机配置放在其他配置文件的前面,或者给默认虚拟主机设置明确的ServerName避免捕获其他请求

第三步:排查DNS和网络连通性

  • 确认sub2.otherdomain.com的DNS解析是否正确指向服务器#1的IP,可以用nslookup sub2.otherdomain.com或者dig sub2.otherdomain.com验证,别解析到服务器#2或者#3了
  • 检查服务器#1和#3之间的网络是否通畅:在服务器#1上执行curl http://服务器#3的IP,看能不能正常获取sub2网站的内容;如果不通,检查服务器#3的防火墙(比如ufw或者iptables)是否允许来自服务器#1的80端口(如果是HTTPS则是443端口)请求

第四步:查看日志定位具体错误

如果上面几步都没问题,就去看日志找线索:

  • 服务器#1的sub2错误日志:tail -f /var/log/apache2/sub2.otherdomain.com-error.log,看有没有代理连接失败、超时或者配置错误的提示
  • 服务器#3的sub2访问日志和错误日志:tail -f /var/log/apache2/sub2.otherdomain.com-access.log,看有没有收到来自服务器#1的请求;如果没收到,说明#1的代理配置有问题;如果收到了但返回错误码(比如404、500),再对应排查网站目录、权限或者程序问题

额外:如果用了HTTPS的注意事项

如果你的子域名用了HTTPS,还要补充检查:

  • 服务器#1上的SSL虚拟主机要加上SSLProxyEngine On,否则无法反向代理HTTPS请求
  • ProxyPass和ProxyPassReverse的目标地址要改成https://服务器#3的IP/
  • 确保服务器#3的SSL证书有效,或者在服务器#1上加上SSLProxyVerify None(测试用,生产环境不建议)跳过证书验证

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:34:03