Ubuntu 22.04下Apache本地多站点配置失败求助
环境信息
- 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

