如何在Debian8上设置Apache虚拟主机

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache Web 服务器是在 Internet 上提供 Web 内容的最流行的方式。 它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

Apache 将其功能和组件分解为您可以独立定制的单个单元。 描述单个站点或域的基本单元称为虚拟主机

使用虚拟主机,您可以使用一台服务器通过匹配机制在单个接口或 IP 之外托管多个域或站点。 您配置域请求以将访问者定向到包含该站点信息的特定目录。 换句话说,您可以在一台服务器上托管多个网站。 只要您的服务器可以处理负载,此方案就可以扩展,没有任何软件限制。

在本教程中,您将在 Debian 8 服务器上设置两个 Apache 虚拟主机,根据访问者访问的域为访问者提供不同的内容。

先决条件

要完成本教程,您需要:

在本指南中,我们将为 example.comtest.com 创建虚拟主机,但您可以在跟随过程中替换您自己的域或值。 要将您的域名指向您的服务器,请按照我们的教程 如何使用 DigitalOcean 设置主机名。

如果您没有可用的域,您可以使用 example.comtest.com 并按照本教程的步骤 5 配置本地主机文件以将这些域映射到服务器的 IP 地址. 这将允许您从本地计算机测试您的配置。

第 1 步 - 创建目录结构

我们要采取的第一步是创建一个目录结构来保存我们将提供给访问者的站点数据。

我们的 文档根 是 Apache 查找要提供的内容的顶级目录,将设置为 /var/www 目录下的各个目录。 我们将为要配置的每个虚拟主机创建一个目录。

在每个目录中,我们将创建一个名为 public_html 的文件夹,该文件夹将保存我们要提供的网页。 这为我们在未来如何部署更复杂的 Web 应用程序提供了更多的灵活性; public_html 文件夹将保存我们要提供的 Web 内容,父文件夹可以保存脚本或应用程序代码以支持 Web 内容。

使用以下命令创建目录:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

由于我们使用 sudo 创建了目录,因此它们归我们的 root 用户所有。 如果我们希望我们的普通用户能够修改我们 Web 目录中的文件,我们更改所有权,如下所示:

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

$USER 变量使用您当前登录的用户的值,就像您按下 ENTER 时一样。 通过这样做,我们的普通用户现在拥有 public_html 子目录,我们将在其中存储我们的内容。

我们还应该稍微修改一下我们的权限,以确保允许对常规 Web 目录及其包含的所有文件和文件夹进行读取访问,以便可以正确地提供页面。 执行此命令以更改 /var/www 文件夹及其子文件夹的权限:

sudo chmod -R 755 /var/www

如果您不熟悉在 Linux 上管理权限,请参阅 本教程

您的 Web 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。 让我们为每个站点创建一个 HTML 文件。

我们有我们的目录结构。 让我们创建一些内容来提供服务。

第 2 步 — 为每个虚拟主机创建默认页面

让我们为每个站点创建一个简单的 index.html 页面。 这将帮助我们确保以后正确配置我们的虚拟主机。

让我们从 example.com 的页面开始。 使用以下命令编辑一个新的 index.html 文件:

nano /var/www/example.com/public_html/index.html

在此文件中,创建一个简单的 HTML 文档,指示访问者正在查看 example.com 的主页:

/var/www/example.com/public_html/index.html

<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success! The example.com virtual host is working!</h1>
  </body>
</html>

完成后保存并关闭文件。

现在将此文件复制到 test.com 站点:

cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

然后在编辑器中打开文件:

nano /var/www/test.com/public_html/index.html

更改文件,使其引用 test.com 而不是 example.com

/var/www/test.com/public_html/index.html

<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body> <h1>Success! The test.com virtual host is working!</h1>
  </body>
</html>

保存并关闭此文件。 您现在拥有测试虚拟主机配置所需的页面。 接下来,让我们配置虚拟主机。

第 3 步 — 创建新的虚拟主机文件

虚拟主机文件指定我们虚拟主机的实际配置,并规定 Apache Web 服务器将如何响应各种域请求。

Apache 附带一个名为 000-default.conf 的默认虚拟主机文件,您可以将其用作起点。 为第一个域复制此文件:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

注意:Debian 8 中默认的 Apache 配置要求每个虚拟主机文件以 .conf 结尾。


在编辑器中打开新文件:

sudo nano /etc/apache2/sites-available/example.com.conf

该文件将类似于以下示例,并带有一些附加注释:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

此虚拟主机匹配在端口 80(默认 HTTP 端口)上发出的 any 请求。 让我们对此配置进行一些更改,并添加一些新指令。

首先,将 ServerAdmin 指令更改为站点管理员可以通过其接收电子邮件的电子邮件。

/etc/apache2/sites-available/example.com.conf

ServerAdmin admin@example.com

接下来,我们需要添加两个新指令。 第一个称为 ServerName,为这个虚拟主机定义建立基域。 第二个,称为 ServerAlias,定义了应该匹配的其他名称,就好像它们是基本名称一样。 这对于匹配您定义的其他主机很有用,因此 example.com www.example.com 都可以工作,前提是这两个主机都指向该服务器的 IP 地址。

将这两个指令添加到您的配置文件中,就在 ServerAdmin 行之后:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
...

接下来,通过更改 DocumentRoot 指令以指向您为此主机创建的目录来更改此域的文档根目录的位置:

DocumentRoot /var/www/example.com/public_html

完成这些更改后,您的文件应如下所示:

/etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/example.com/public_html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并关闭文件。

然后通过创建此文件的副本来创建第二个配置文件:

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

在编辑器中打开新文件:

sudo nano /etc/apache2/sites-available/test.com.conf

然后更改相关设置以引用您的第二个域。 完成后,您的文件将如下所示:

/etc/apache2/sites-available/test.com.conf

<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并关闭文件。

现在我们已经创建了虚拟主机文件,我们可以启用它们。

第 4 步 — 启用新的虚拟主机文件

您已经创建了文件夹和虚拟主机配置文件,但 Apache 在您激活它们之前不会使用它们。 您可以使用 a2ensite 工具来启用您的每个站点。

激活第一个站点:

sudo a2ensite example.com.conf

如果您的文件中没有语法错误或拼写错误,您将看到以下输出:

OutputEnabling site example.com.
To activate the new configuration, you need to run:
  service apache2 reload

为了使您的更改生效,您必须重新加载 Apache。 但在此之前,请启用其他站点:

sudo a2ensite test.com.conf

您将看到一条类似的消息,表明该站点已启用:

OutputEnabling site test.com.
To activate the new configuration, you need to run:
  service apache2 reload

接下来,使用 a2dissite 命令禁用 000-default.conf 中定义的默认站点:

sudo a2dissite 000-default.conf

现在,重新启动 Apache:

sudo systemctl restart apache2

现在已配置站点。 让我们测试一下。 如果您使用配置为指向服务器 IP 地址的真实域,则可以跳过下一步。 但是,如果您的域尚未传播,或者您只是在测试,请继续阅读以了解如何使用本地计算机测试此设置。

第 5 步 — 设置本地主机文件(可选)

如果您没有使用您拥有的实际域名来测试此过程,而是使用了一些示例域,您至少可以通过临时修改本地上的 hosts 文件来测试此过程的功能电脑。

这将拦截对您配置的域的任何请求,并将它们指向您的 VPS 服务器,就像 DNS 系统在您使用注册域时所做的那样。 不过,这仅适用于您的计算机,并且仅用于测试目的。

确保您在本地计算机上执行这些步骤,而不是您的 VPS 服务器。 您还需要知道本地计算机的管理密码或成为管理组的成员。

如果您使用的是 Mac 或 Linux 计算机,请使用管理员权限编辑本地文件,方法是键入:

sudo nano /etc/hosts

如果您使用的是 Windows,请使用管理权限打开命令提示符并键入:

notepad %windir%\system32\drivers\etc\hosts

打开文件后,添加一行将服务器的公共 IP 地址映射到每个域名,如以下示例所示:

/etc/hosts

127.0.0.1   localhost
...

111.111.111.111 example.com
111.111.111.111 test.com

这将引导您计算机上对 example.comtest.com 的任何请求,并将它们发送到您的服务器 111.111.111.111

保存并关闭文件。 现在您可以测试您的设置。 当您确信一切正常时,请从文件中删除这两行。

第 6 步——测试你的结果

现在您已经配置了虚拟主机,您可以通过转到您在 Web 浏览器中配置的域来轻松测试您的设置。 访问位于 http://example.com 的第一个站点,您将看到如下所示的页面:

同样,如果您可以在 http://test.com 访问您的第二个主机,您将看到为您的第二个站点创建的文件:

如果这两个站点都运行良好,那么您已经成功地在同一台服务器上配置了两个虚拟主机。

注意:如果您按照步骤 5 调整了家用计算机的 hosts 文件,您可能需要删除添加的行,因为您已验证您的配置有效。 这将防止您的主机文件被实际不需要的条目填充。


结论

您现在有一个服务器处理两个单独的域名。 您可以按照以下步骤扩展此过程以添加其他虚拟主机。

Apache 可以处理的域名数量没有软件限制,所以您可以随意制作尽可能多的服务器能够处理的域名。

要使用 Apache 提供安全内容,请按照教程 如何在 Debian 8 上使用 Let's Encrypt 保护 Apache。 要在您的 Web 应用程序前面使用 Apache,请遵循 如何在 Debian 8 上使用 Apache 作为带有 mod_proxy 的反向代理。