我目前正在使用 AWS EC2(ubuntu 20.04)机器。我已经安装了 apache2 并在 /var/www/myapp/myapp.html 和 /var/www/mynew/mynew.html 配置了两个新站点。我在 /etc/apache/sites-available/myapp.conf 位置创建了一个新的虚拟主机文件。我添加了 2 个与上述站点相对应的虚拟主机条目。启用了 myapp.conf 文件(a2ensite myapp.conf)并禁用了默认虚拟主机文件(000-default.conf)。作为实验,我在虚拟主机指令中输入了错误的 IP:端口组合,因此我的请求将与任何虚拟主机都无法匹配。当我尝试访问服务器时,它会提供默认网页。但我期待的是第一个虚拟主机内容。
是否有人知道如果没有虚拟主机与请求的 IP:端口匹配,为什么会显示禁用的默认网页?
答案1
最后,我找到了我的问题的答案。
我进行了更多故障排除并尝试了如下所述的其他方案,
- 确保“ports.conf”文件配置正确。
- 检查了 apache 日志 - 但说实话我没有找到任何有用的信息。
- 作为最后的检查,我删除了默认的虚拟主机配置文件(重命名为 nmapp-default.conf)-> 但即使在删除文件并重新启动服务器后,apache 仍提供相同的默认网页。这让我想到,除了这个默认的虚拟主机文件之外,还存在一些不同的配置,这些配置将 apache 重定向到相同的默认网页。
我的发现:
- 运行命令 sudo apachectl -S 来确定我的虚拟主机实际加载的位置/方式
- 从命令的输出中我得到了“主 DocumentRoot:“/var/www/html”
我搜索了此内容并发现了以下详细信息。
顾名思义,当虚拟主机本身未指定 DocumentRoot 值时,它是虚拟主机的默认 DocumentRoot 值。因此,如果请求与缺少 DocumentRoot 指令的虚拟主机块匹配,则 Apache 将使用默认或主文档根目录来处理请求。
Apache 默认文档根目录在两个地方指定,
- httpd 的编译时或运行时选项。
- 主服务器配置是虚拟主机块之外指定的配置。任何虚拟主机配置基本上都会从主服务器配置中获取默认值(在我的例子中,主配置文件(即 apache2.conf)中的任何地方都没有提到该值,因此必须在运行时进行设置)
注意:主服务器配置中指定的文档根目录值将覆盖从编译时或运行时选项继承的值
换句话说,我的主要 DocumentRoot 未配置并且使用默认值,直到我在全局配置文件中明确定义它。
请参阅此链接了解更多信息: