如何在 Ubuntu 14.04 LTS 上设置 Apache 虚拟主机
介绍
Apache Web 服务器是在 Internet 上提供 Web 内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且极其强大和灵活。
Apache 将其功能和组件分解为可以独立定制和配置的独立单元。描述单个站点或域的基本单元称为 虚拟主机
。
这些指定允许管理员使用一个服务器通过使用匹配机制从单个接口或 IP 托管多个域或站点。这与希望通过单个 VPS 托管多个站点的任何人都相关。
配置的每个域都会将访问者定向到保存该站点信息的特定目录,从不表示同一服务器也负责其他站点。只要您的服务器可以处理负载,该方案是可扩展的,没有任何软件限制。
在本指南中,我们将带您了解如何在 Ubuntu 14.04 VPS 上设置 Apache 虚拟主机。在此过程中,您将了解如何根据访问者请求的域向不同的访问者提供不同的内容。
先决条件
在开始本教程之前,您应该按照此处步骤 1-4 中的描述创建一个非根用户。
您还需要安装 Apache 才能完成这些步骤。如果您还没有这样做,您可以通过 apt-get
在您的服务器上安装 Apache:
sudo apt-get update
sudo apt-get install apache2
这些步骤完成后,我们就可以开始了。
出于本指南的目的,我的配置将为 example.com
创建一个虚拟主机,为 test.com
创建一个虚拟主机。这些将在整个指南中被引用,但您应该在跟随时替换您自己的域或值。
要了解如何使用 DigitalOcean 设置您的域名,请访问此链接。如果您没有可以玩的域,您可以使用虚拟值。
如果您使用的是虚拟值,我们将在稍后展示如何编辑本地主机文件以测试配置。这将允许您从您的家庭计算机测试您的配置,即使您的内容将无法通过域名提供给其他访问者。
第一步 - 创建目录结构
我们要采取的第一步是创建一个目录结构,用于保存我们将为访问者提供的站点数据。
我们的 document root
(Apache 查看以查找要提供的内容的顶级目录)将设置为 /var/www
目录下的各个目录。我们将在这里为我们计划制作的两个虚拟主机创建一个目录。
在每个 这些 目录中,我们将创建一个 public_html
文件夹来保存我们的实际文件。这使我们在托管方面具有一定的灵活性。
例如,对于我们的网站,我们将制作这样的目录:
<前>
红色部分代表我们想要从我们的 VPS 提供服务的域名。
第二步 - 授予权限
现在我们有了文件的目录结构,但它们归根用户所有。如果我们希望我们的普通用户能够修改我们网站目录中的文件,我们可以通过这样做来更改所有权:
<前>
$USER
变量将采用您当前登录的用户的值,就像您按 \ENTER 时一样。通过这样做,我们的普通用户现在拥有 public_html
我们将存储内容的子目录。
我们还应该稍微修改我们的权限,以确保允许对通用 Web 目录及其包含的所有文件和文件夹进行读取访问,以便可以正确提供页面:
sudo chmod -R 755 /var/www
您的 Web 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。
第三步——为每个虚拟主机创建演示页面
我们有我们的目录结构。让我们创建一些内容来提供服务。
我们只是为了演示,所以我们的页面会非常简单。我们将为每个站点创建一个 index.html
页面。
让我们从 example.com
开始。我们可以在编辑器中打开一个 index.html
文件,方法是输入:
<前>
在此文件中,创建一个简单的 HTML 文档,指示它所连接的站点。我的文件如下所示:
<前>
完成后保存并关闭文件。
我们可以通过键入以下内容复制此文件以用作我们第二个站点的基础:
<前>
然后我们就可以打开文件,修改相关信息了:
<前>
保存并关闭此文件。您现在拥有测试虚拟主机配置所需的页面。
第四步——创建新的虚拟主机文件
虚拟主机文件是指定我们虚拟主机的实际配置并指示 Apache Web 服务器将如何响应各种域请求的文件。
Apache 带有一个名为 000-default.conf
的默认虚拟主机文件,我们可以将其用作起点。我们将复制它来为我们的每个域创建一个虚拟主机文件。
我们将从一个域开始,对其进行配置,将其复制到我们的第二个域,然后进行一些必要的进一步调整。默认的 Ubuntu 配置要求每个虚拟主机文件都以 .conf
结尾。
创建第一个虚拟主机文件
首先复制第一个域的文件:
<前>
使用 root 权限在编辑器中打开新文件:
<前>
该文件看起来像这样(我删除了此处的注释以使文件更易于理解):
<前>
如您所见,这里没有太多内容。我们将为我们的第一个域自定义项目并添加一些额外的指令。此虚拟主机部分匹配在端口 80(默认 HTTP 端口)上发出的任何请求。
首先,我们需要将 ServerAdmin
指令更改为站点管理员可以通过其接收电子邮件的电子邮件。
<前>
在此之后,我们需要添加 两个指令。第一个称为 ServerName
,它建立了应该匹配这个虚拟主机定义的基域。这很可能是您的域。第二个名为 ServerAlias
,定义了更多的名称,这些名称应该像基本名称一样匹配。这对于匹配您定义的主机很有用,例如 www
:
<前>
我们需要为基本虚拟主机文件更改的唯一另一件事是该域的文档根目录的位置。我们已经创建了我们需要的目录,所以我们只需要改变 DocumentRoot
指令来反映我们创建的目录:
<前>
总的来说,我们的虚拟主机文件应该是这样的:
<前>
保存并关闭文件。
复制第一个虚拟主机并为第二个域自定义
现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要进行调整来创建第二个虚拟主机文件。
从复制它开始:
<前>
在编辑器中以 root 权限打开新文件:
<前>
您现在需要修改所有信息以引用您的第二个域。完成后,它可能看起来像这样:
<前>
完成后保存并关闭文件。
第五步——启用新的虚拟主机文件
现在我们已经创建了虚拟主机文件,我们必须启用它们。 Apache 包括一些允许我们这样做的工具。
我们可以使用 a2ensite
工具来启用我们的每个站点,如下所示:
<前>
完成后,您需要重新启动 Apache 以使这些更改生效:
sudo service apache2 restart
您很可能会收到一条消息,内容类似于:
* Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
这是一条不会影响我们网站的无害消息。
第六步 - 设置本地主机文件(可选)
如果您没有使用您拥有的实际域名来测试此过程,而是使用了一些示例域,您至少可以通过临时修改 hosts
文件来测试此过程的功能您的本地计算机。
这将拦截对您配置的域的任何请求,并将它们指向您的 VPS 服务器,就像 DNS 系统在您使用注册域时所做的那样。不过,这仅适用于您的计算机,并且仅用于测试目的。
确保您在本地计算机而不是 VPS 服务器上执行这些步骤。您将需要知道计算机的管理密码或以其他方式成为管理组的成员。
如果您使用的是 Mac 或 Linux 计算机,请使用管理权限编辑本地文件,方法是键入:
sudo nano /etc/hosts
如果您使用的是 Windows 计算机,则可以在此处找到有关更改主机文件的说明。
您需要添加的详细信息是您的 VPS 服务器的公共 IP 地址,后跟您要用于访问该 VPS 的域。
对于我在本指南中使用的域,假设我的 VPS IP 地址是 111.111.111.111
,我可以将以下行添加到我的主机文件的底部:
<前>
这将在我们的计算机上引导对 example.com
和 test.com
的任何请求,并将它们发送到我们位于 111.111.111.111
的服务器。如果我们实际上不是这些域的所有者,这就是我们想要的,以便测试我们的虚拟主机。
保存并关闭文件。
第七步——测试你的结果
现在您已经配置了虚拟主机,您可以通过转到您在 Web 浏览器中配置的域来轻松测试您的设置:
<前>
您应该会看到如下所示的页面:

同样,如果您可以访问您的第二页:
<前>
您将看到为第二个站点创建的文件:

如果这两个站点都运行良好,则您已成功在同一台服务器上配置了两个虚拟主机。
如果您调整了家庭计算机的主机文件,您可能想要删除现在添加的行,因为您已验证您的配置是否有效。这将防止您的 hosts 文件被实际不需要的条目填充。
如果您需要长期访问,请考虑为您需要的每个站点购买一个域名,并将其设置为指向您的 VPS 服务器。
结论
如果继续,您现在应该有一个服务器处理两个不同的域名。您可以按照我们上面概述的步骤来扩展此过程以创建其他虚拟主机。
Apache 可以处理的域名数量没有软件限制,因此请随意创建您的服务器能够处理的域名数量。