Apache 是目前世界上使用最广泛的 Web 服务器。它是一款开源软件,由Apache 软件基金会维护。截至 2020 年 9 月,估计它为全球 36% 的网站流量提供服务。开发者因其速度、安全性、可靠性和健壮性而喜爱它。它的易定制性使其能够通过安装扩展和模块来满足许多环境的需求。
Apache 配备了一个匹配系统,您可以使用该系统在暴露于单个 IP 地址的单个 Apache 服务器安装上托管多个域名或网站。这些域名或网站是在定义为虚拟主机的 Apache 配置文件之一中设置的。
每个域名都有一个虚拟主机定义,并指向一个特定的目录。当用户访问某个域名时,服务器会检查每个匹配的虚拟主机,并根据用户输入的主机名选择使用哪一个来响应访问者的请求。如果未找到匹配的主机名,服务器将使用 conf 文件中定义的第一个虚拟主机作为备用。访问者将访问他们请求的网页,而无需知道同一台服务器还在为其他网站提供服务。根据您服务器上的资源以及它能处理的流量大小,您可以托管任意数量的域名。
在本教程中,我们将引导您在 Ubuntu 20.04 服务器上设置虚拟主机。
首先
为了学习本教程,您应该已安装 Ubuntu 20.04。您还需要创建一个非 root 用户并使用该用户登录。
本教程中的步骤还需要您安装 Apache。如果您尚未安装,可以使用以下命令进行安装。您可以参考我们的 LAMP 架构设置 – Linux Apache MySQL PHP 教程 以获取更详细的设置指南。
|
1 2 |
sudo apt update sudo apt install apache2 |
您应该已经从您选择的域名注册商处注册了免费或付费的域名。请确保通过配置 DNS 记录将域名指向您的服务器。不过,您仍然可以使用我们的配置来完成本教程中的步骤。在本教程中,我们将使用 example.dev 和 mydomain.com。您可以自由地将它们替换为您自己的域名。如果您决定使用测试域名,则必须编辑 Apache 上的 hosts 文件以处理这些域名。我们将在本教程的后面部分介绍如何执行此操作。
步骤 1 – 设置网站目录
这些是存放网站数据的目录,您的网站访问者将访问这些数据。可从互联网访问的 Apache 文档根目录通常位于 /var/www。我们将在该目录下为我们要托管的各个域名创建目录。在每个目录中,我们将添加 public_html 目录来存放实际的网站文件。虚拟主机指向 public_html 目录。这为您提供了灵活性,因为您可以将关键的网站文件保留在 public_html 之外,而只将公共文件放在其中。
接下来,输入以下命令来创建目录。请务必记住在后续设置中将测试域名替换为您实际的域名:
|
1 2 |
sudo mkdir -p /var/www/example.dev/public_html sudo mkdir -p /var/www/mydomain.com/public_html |
步骤 2 – 更改读写权限
之前的命令创建了目录结构,但所有权仍属于 root 用户。我们希望我们的非 root 用户对这些目录拥有完全的读写权限。我们还希望普通 Web 具有读取权限。
首先,通过输入以下命令将所有权更改为 non-root 用户:
|
1 2 |
sudo chown -R $USER:$USER /var/www/example.dev/public_html sudo chown -R $USER:$USER /var/www/mydomain.com/public_html |
$USER 是一个获取当前登录用户凭据的变量。普通用户现在拥有了 public_html 的所有权。接下来,您需要向通用 Web 授予读取权限。以下命令允许对目录中的所有文件进行授权,以确保网页能够正确提供服务:
|
1 |
sudo chmod -R 755 /var/www |
通过运行前面的三个命令,您的网站现在可以提供内容了。此外,您的用户也可以在特定目录中创建要提供的内容。在这里您可以找到更多关于Ubuntu 权限的信息.
步骤 3 – 在每个虚拟主机的目录中创建演示页面
目录结构就绪后,是时候进行一些脚本编写了。我们将使用 HTML 和 nano 文本编辑器来创建一些基本的网页。输入以下命令以打开 nano 并在第一个域名的目录中创建一个 index.html 文件:
|
1 |
vim /var/www/example.dev/public_html/index.html |
在编辑器中,放入以下示例代码,这些代码将在我们访问该域名时显示:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>欢迎来到 Example.dev!</title> </head> <body> <h1>成功! The example.dev 虚拟主机正在 工作!</h1> </body> </html> |
粘贴上述行后,按 “!wq” 保存并退出文件。
通过输入以下命令,使用 nano 编辑器为第二个域名创建 index.html 页面:
|
1 |
vim /var/www/mydomain.com/public_html/index.html |
然后,在编辑器中粘贴以下 HTML 代码,保存并退出:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>欢迎来到 Mydomain.com!</title> </head> <body> <h1>成功! The mydomain.com 虚拟主机正在 工作!</h1> </body> </html> |
现在,您已经有了用于测试我们将在下一步中创建的两个虚拟主机的页面。
步骤 4 – 为域名创建虚拟主机文件
虚拟主机文件包含每个虚拟主机的配置。它们定义了域名的服务方式。新安装的 Apache 附带一个名为 000-default.conf 的默认虚拟主机文件,我们可以使用它并将其调整为适用于我们的域名。如您所见,它以 .conf 扩展名结尾,这是 Ubuntu 对配置文件的要求。
Apache 配置文件位于 /etc/apache2/sites-available 目录中。我们将在那里存储我们的虚拟主机文件。我们可以复制默认的 conf 文件并在必要时进行编辑。
-
为 example.dev 域名创建第一个虚拟主机文件
输入以下命令,通过复制默认的 conf 文件来创建 example.dev.conf:
|
1 |
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.dev.conf |
接下来,使用以下命令以 sudo 权限用 nano 编辑器打开创建的文件:
|
1 |
sudo nano /etc/apache2/sites-available/example.dev.conf |
默认的 conf 文件如下图所示。注释是用于指导您的。我们可以将其删除,只留下包含实际配置行的干净文件:

您需要根据您的域名和保存网站文件的目录路径来定制此文件。此外,我们将更新并在文件中添加几个指令。它已经包含一个 ServerAdmin 指令,其中包含服务器管理员接收电子邮件的电子邮件地址。它还包含一个 DocumentRoot 指令,该指令指向您存储网站文件的目录。
我们需要添加两个新指令:ServerName 和 ServerAlias。ServerName 设置基础域名。这是您放置域名的地方。ServerAlias 定义了 Apache 应该匹配的其他名称,就好像它们是基础域名一样。它允许您匹配像 www 这样的主机。
更新文件,使其如下所示:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@example.dev ServerName example.dev ServerAlias www.example.dev DocumentRoot /var/www/example.dev/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
之后,相应地更新您的域名和电子邮件。完成后,按 CTRL + O 并按回车键(ENTER)保存文件。要退出编辑器,请按 CTRL + X。
-
为 mydomain.com 域名创建第一个虚拟主机文件
我们只需复制第一个域名的虚拟主机,并在必要时为第二个域名进行更新。使用以下命令复制文件:
|
1 |
sudo cp /etc/apache2/sites-available/example.dev.conf /etc/apache2/sites-available/mydomain.com.conf |
然后,使用以下命令在 nano 编辑器中打开它:
|
1 |
sudo nano /etc/apache2/sites-available/mydomain.com.conf |
找到这些指令并进行相应更新,使文件如下所示:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@mydomain.com ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/mydomain.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
完成后,保存文件并退出编辑器。
第 5 步 – 启用虚拟主机文件
在第四步中,我们创建了虚拟主机文件。但是,在您启用它们之前,它们是无法工作的。Apache 有一个名为 a2ensite 的工具,我们将使用它来启用虚拟主机。
输入以下两个命令以启用虚拟主机:
|
1 2 |
sudo a2ensite example.dev.conf sudo a2ensite mydomain.com.conf |
上述命令的输出如下所示:

接下来,您应该禁用默认配置文件,我们使用 a2dissite Apache 工具来禁用网站。输入以下命令:
|
1 |
sudo a2dissite 000-default.conf |
从输出中可以看出,您必须重启 Apache 才能使配置生效。使用以下命令:
|
1 |
sudo systemctl restart apache2 |
然后,使用以下命令检查 Apache 的状态:
|
1 |
sudo systemctl status apache2 |
输出显示您的服务器已启动并运行,并且能够为这两个网站提供服务。

步骤 6 – 使用示例域名修改本地 Hosts 文件
如果您没有注册实际域名,而是使用测试域名,则必须更新本地 hosts 文件。当您导航到虚拟主机文件中设置的任何域名时,它们需要拦截流量并将其定向到您的网站目录。请记住,这仅在您的本地计算机上有效。如果您的本地计算机运行的是 Windows 操作系统,那么 请按照此链接中的说明设置 hosts.
如果您使用的是 Mac 或 Linux 机器,hosts 文件位于 /etc 目录中。我们将使用 nano 编辑器打开并添加我们的测试域名。首先,通过输入以下命令找到您的 VPS IP 地址:
|
1 |
curl -4 icanhazip.com |
输入以下命令打开文件并使用您的服务器 IP 地址进行更新:
|
1 |
sudo nano /etc/hosts |
|
1 2 3 4 |
127.0.0.1 localhost 127.0.1.1 ComputerName your_server_IP example.dev your_server_IP mydomain.com |
然后,保存并关闭文件。每当您在浏览器中输入域名时,系统会首先检查 hosts 文件。如果找到了该域名,流量就会被定向到指定的 IP 地址。如果未找到,则使用 DNS 系统进行全局重定向。对于我们的测试域名,流量将被定向到指定的 IP 地址。
步骤 7 – 测试您的虚拟主机
设置好域名后,您可以通过在浏览器/终端中检查它们来测试它们是否正常工作:
|
1 |
curl http://example.dev |
输出应该显示类似于以下内容:

|
1 |
http://mydomain.com |

恭喜!您已成功配置在同一台服务器上运行两个网站。
结论
在本指南中,您学习了如何配置 Apache 服务器以提供多个网站的服务。如果您想添加更多网站,可以按照上述步骤并设置虚拟主机来实现。只要您的服务器资源能够承受,Apache 可以处理任意数量的域名。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。