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

Ubuntu 22.04下Apache本地多站点配置失败求助

Apache虚拟主机配置故障排查:prj2.localhost显示prj1内容

环境信息

  • Ubuntu 22.04
  • Apache/2.4.52

问题描述

已配置两个本地站点prj1和prj2,访问http://prj1.localhost可正常显示对应内容,但http://prj2.localhost始终显示prj1的内容。

已执行的操作(整理后)

  • 创建站点目录:
    sudo mkdir /var/www/prj1 /var/www/prj2
    
  • 生成index.html文件(内容分别对应各自站点路径)
  • 设置权限(注:其中chown -R 775为错误命令):
    sudo chown -R www-data:www-data /var/www
    sudo chown -R 775 /var/www
    sudo chown -R www-data:www-data /var/www/prj1 /var/www/prj2
    
  • 创建虚拟主机配置文件prj1.conf和prj2.conf,ServerName分别设为prj1和prj2
  • 启用站点:
    a2ensite prj1 prj2
    
  • 修改apache2.conf,重复添加DocumentRoot和目录配置
  • 修改/etc/hosts:
    127.0.0.1 localhost prj1
    127.0.0.1 localhost prj2
    
  • 重启Apache服务

核心错误点与修复方案

1. apache2.conf中重复定义DocumentRoot

Apache全局配置仅允许一个DocumentRoot,重复设置会导致最后一个生效,且会干扰虚拟主机的匹配逻辑。虚拟主机已单独配置了各自的DocumentRoot,无需全局重复设置。

修复:
打开/etc/apache2/apache2.conf,删除以下冗余内容:

DocumentRoot "/var/www/prj1"
<Directory "/var/www/prj1">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
</Directory>

DocumentRoot "/var/www/prj2"
<Directory "/var/www/prj2">
            Options FollowSymLinks
            AllowOverride All
            Require all granted
</Directory>

保留<Directory /var/www/>的配置即可。

2. 虚拟主机ServerName与访问域名不匹配

你访问的是prj1.localhost和prj2.localhost,但虚拟主机配置的ServerName是prj1和prj2,Apache无法正确匹配请求到对应虚拟主机,导致请求 fallback 到默认站点。

修复:
编辑/etc/apache2/sites-available/prj1.conf,修改ServerName为prj1.localhost,并替换Apache 2.2风格的权限语法为2.4标准语法:

<VirtualHost *:80>
     ServerAdmin admin@prj1.localhost
     ServerName prj1.localhost
     
     DocumentRoot /var/www/prj1/
     <Directory />
        Options FollowSymLinks
        AllowOverride None
     </Directory>     
     <Directory /var/www/prj1/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        # 替换旧语法为Apache 2.4标准
        Require all granted
     </Directory>

     ErrorLog ${APACHE_LOG_DIR}/prj1_error.log
     CustomLog ${APACHE_LOG_DIR}/prj1_access.log combined
</VirtualHost>

对prj2.conf执行同样操作,将ServerName改为prj2.localhost。

3. /etc/hosts配置冗余且解析不明确

原配置将prj1、prj2与localhost绑定,但你访问的是带.localhost后缀的域名,需明确配置解析。

修复:
打开/etc/hosts,修改为:

127.0.0.1 localhost
127.0.0.1 prj1.localhost
127.0.0.1 prj2.localhost

4. 权限命令错误

原命令sudo chown -R 775 /var/www混淆了chown(设置用户组)和chmod(设置权限),775是权限值,需用chmod命令。

修复:
重新执行正确的权限设置:

sudo chmod -R 775 /var/www

5. 重启Apache生效

完成以上修改后,重启Apache服务:

sudo systemctl restart apache2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:32:03