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
相关产品推荐
相关产品推荐

