如何在 Ubuntu 22.04 上配置 Apache 虚拟主机
在此页
- 我们将涵盖哪些内容?
- 现在开始...
- 测试 Apache 虚拟主机设置
- 结论
公司使用虚拟托管概念来使用一台机器托管多个网站。它可以通过“基于 IP”的方法或“基于名称”的方法来实现。在“基于 IP 的”托管中,我们为每个网站提供不同的 IP 地址。在“基于名称”的托管情况下,我们在每个 IP 地址上运行多个名称。
我们将介绍什么?
在本教程中,我们将了解如何使用基于名称的虚拟主机在 Ubuntu 22.04 系统上托管两个虚拟主机。我们将使用 Apache Web 服务器。
现在就开始...
步骤 1. 同时更新存储库和操作系统:
sudo apt update
sudo apt upgrade -y
步骤 2. 使用以下命令为 Ubuntu 安装 Apache Web 服务器:
sudo apt install apache2 -y

sudo systemctl restart apache2
sudo systemctl status apache2

示例输出:
? apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
Active: active (running) since Mon 2022-06-27 09:32:14 UTC; 18s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 13093 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/S>
Main PID: 13098 (apache2)
Tasks: 55 (limit: 1146)
Memory: 4.7M
CPU: 25ms
CGroup: /system.slice/apache2.service
??13098 /usr/sbin/apache2 -k start
??13099 /usr/sbin/apache2 -k start
??13100 /usr/sbin/apache2 -k start
第 4 步。在“www”文件夹中创建两个新目录。设这些目录为 host1 和 host2。
同样,在这些目录中再创建一个文件夹来保存您的 Web 文件。让这些目录成为 public_html 和 public_html。这些目录将包含这两个主机的相应 index.html 文件:
sudo mkdir -p /var/www/host1/public_html
sudo mkdir -p /var/www/host2/public_html
目录“/var/www/host1/public_html”和“/var/www/host2/public_html”也代表两个虚拟主机的文档根目录。
第 5 步。上面创建的目录归 root 用户所有。要让普通用户修改这些目录中的文件,应使用以下命令更改所有权:
sudo chown -R $USER:$USER /var/www/host1/public_html
sudo chown -R $USER:$USER /var/www/host2/public_html
“$USER”变量将使用当前登录用户的值。 “public_html”现在将归该用户所有。
第 6 步。现在为 apache 通用 Web 目录设置“读取访问”权限:
sudo chmod -R 755 /var/www
第 7 步。现在我们将为每个虚拟主机设置一个默认页面,即 index.html。这可以使用“echo”命令直接从终端完成。对于虚拟主机 1:
sudo echo “Welcome to Virtual Host 1.” > /var/www/host1/public_html/index.html
对于虚拟主机 2:
sudo echo “Welcome to Virtual Host 2.” > /var/www/host2/public_html/index.html
步骤 8. 在继续之前,我们使用一个中间步骤。这里我们将修改hosts文件,将本地主机地址映射到两个虚拟主机域名:www.host1.com和www.host2.com。这样做是为了避免公开注册我们的域名。
sudo sh -c "echo 127.0.0.1 www.host1.com >> /etc/hosts"
sudo sh -c "echo 127.0.0.1 www.host2.com >> /etc/hosts"
以上步骤如下图所示:

\000-default.conf 可用作每个虚拟主机的基础文件。只需将此文件复制到同一位置,并使用两个不同的名称:host1.conf 和 host2.conf:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host1.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host2.conf
第 10 步。现在打开文件并为每个虚拟主机修改它们。例如,对于虚拟主机1,应将以下参数修改为:
<VirtualHost *:80>
ServerAdmin
ServerName host1
ServerAlias www.host1.com
DocumentRoot /var/www/host1/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
对于第二个文件 (host2.conf),将 host1 条目替换为 host2。或者,您也可以新建两个文件,分别输入每个虚拟主机对应的上述内容。文件 host2.conf 如下所示:
<VirtualHost *:80>
ServerAdmin
ServerName host2
ServerAlias www.host2.com
DocumentRoot /var/www/host2/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
第 10 步。现在我们已经创建了虚拟主机文件,是时候实际启用这些文件了。为此,Apache 提供了一个名为“a2ensite”的工具。使用以下命令启用它们:
sudo a2ensite host1.conf
sudo a2ensite host2.conf
第 11 步。在终端上,您将看到一条消息,提示您重新加载 apache 以激活新配置,但在此之前,请使用以下命令禁用由 \000-default.conf 表示的默认站点:
sudo a2dissite 000-default.conf
第 12 步。使用以下命令检查配置文件是否存在任何语法错误:
sudo apache2ctl configtest
第 13 步。最后,重新加载 apache2 服务以应用上面所做的更改:
sudo systemctl reload apache2

测试 Apache 虚拟主机设置
我们现在将检查是否一切设置正确。在你的机器上打开一个终端并运行命令:
$ curl www.host1.com
上面的命令应该返回来自虚拟主机 1 索引页的消息,类似地,下面的命令应该显示来自虚拟主机 2 的消息:
$ curl www.host2.com

结论
我们终于成功了,我们的虚拟主机按预期工作。我们也可以使用 Terraform 执行本教程,试试吧。