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

Ubuntu20.04 Apache多站点配置:指定域名指向目录,其余请求反向代理

Apache 2.4多站点配置方案

需求回顾

当请求域名是abc.example.com时,Apache返回/var/www/my-website目录下的静态文件;所有其他域名的请求,反向代理到http://127.0.0.1:3000。

问题分析

  • 方法一失败原因:Apache虚拟主机匹配时,若未指定默认虚拟主机,会以第一个加载的配置文件作为默认。如果vs2.conf文件名排序在vs1.conf之前,所有不匹配abc.example.com的请求会错误落入默认规则,但vs2.conf仅对应特定域名,导致逻辑混乱。同时vs1.conf未明确标记为默认虚拟主机,Apache无法将其识别为兜底规则。
  • 方法二失败原因:单个虚拟主机内同时配置DocumentRoot和ProxyPass时,Apache会优先执行ProxyPass规则,导致abc.example.com的请求被代理到3000端口,而非读取本地目录,因此显示空白页。

正确配置步骤

1. 启用必要的Apache模块

先确保代理相关模块已启用:

sudo a2enmod proxy proxy_http

2. 创建两个虚拟主机配置文件

配置文件1:默认虚拟主机(处理所有非abc.example.com的请求)

创建/etc/apache2/sites-available/default-proxy.conf,内容如下:

<VirtualHost _default_:80>
    # 标记为默认虚拟主机,兜底所有未匹配的请求
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>

配置文件2:abc.example.com专属虚拟主机

创建/etc/apache2/sites-available/abc-site.conf,内容如下:

<VirtualHost *:80>
    ServerName abc.example.com
    ServerAlias abc.example.com
    
    DocumentRoot /var/www/my-website
    
    # 设置目录权限,确保Apache能读取文件
    <Directory /var/www/my-website>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

3. 启用配置并重启Apache

# 启用配置文件
sudo a2ensite default-proxy.conf abc-site.conf

# 禁用冲突的默认配置(如000-default.conf)
sudo a2dissite 000-default.conf

# 检查配置语法
sudo apache2ctl configtest

# 重启Apache服务
sudo systemctl restart apache2

验证配置

  • 访问abc.example.com:应显示/var/www/my-website目录下的默认页面(如index.html)。
  • 访问其他域名(如xyz.example.com):应被代理到http://127.0.0.1:3000的服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:10:11