使用多个 vhost 文件在 Apache2 上指定默认 vhost

使用多个 vhost 文件在 Apache2 上指定默认 vhost

我已经使用 Moonshine(一个 Ruby on Rails 部署插件/脚本)设置了一个 Ubuntu Linux VPS,并在其上托管了多个站点(尽管 Moonshine 旨在用于一个站点/应用程序),到目前为止运行良好。

我的服务器有一个小问题,每当我意外错误地设置虚拟主机或找不到虚拟主机时,浏览器就会定向到我设置的第一个虚拟主机站点。这让我很担心,因为我不想在出现错误或问题时将一个站点意外地与另一个站点关联;如果出现任何问题,我“更希望”它定向到某个默认位置(如 /var/www/default/oops.html)。

我用 Google 搜索了这个问题,常见的答案是顺序决定了虚拟主机文件中的一切,但我认为这是假设我将所有虚拟主机都放在一个文件中。相反,我的虚拟主机分别在 apache(mydomain1.com、mydomain2.com 等)和“a2ensite”的 sites-available/enabled 文件夹中设置,那么我该如何“排序”它们呢?(其中一个文件是“默认”文件,但似乎什么都不做。)

我看到的另一件事是在 httpd.conf 中指定一个默认主机,但是当我尝试这样做时,它将我的所有 vhost 站点完全重定向到默认主机。

答案1

Include在 Ubuntu 上,您的虚拟主机将通过配置文件中的语句加载/etc/apache2/apache2.conf。您说得对,如果 Apache 无法匹配请求,它会将其找到的第一个 VirtualHost 视为默认 VirtualHost,但仅仅因为 VirtualHost 指令不在同一文件中,并不妨碍您对它们进行排序。

在底部/etc/apache2/apache2.conf你可以找到这一行:

# Include the virtual host configurations:
Include sites-enabled/

这是 Apache 获取 /etc/apache2/sites-enabled/ 中指定的 VirtualHosts 的地方,因此您有两个选择:

在配置文件中的上述 Include 行上方放置一个包含内容以添加新的 VirtualHost apache2.cnf

或者按 顺序排列文件sites-enabled。我不确定 Apache 读取这些文件的具体机制,但我假设它是先按字母顺序排列数字(与ls列出目录的方式相同)。Ubuntu 上包含的默认站点名为 暗示了这一点000-default。因此,基于此,要创建新的默认 VirtualHost,您需要在sites-available名为 中创建一个新的 VirtualHost 配置(例如)00_default_vhost.conf,然后使用 启用它a2ensite

相关内容