Apache HTTP 服务器是一种非常流行的开源 Web 服务器,它为开发人员提供了灵活性、强大的功能和广泛的支持。Apache 服务器配置不是在单个单一文件中进行,而是通过模块化设计进行,可以根据需要添加和修改新文件。在这种模块化设计中,您可以为一个单独的站点或域添加配置文件,称为虚拟主机。

如何在 Ubuntu 20.04 上配置 Apache 虚拟主机
通过使用虚拟主机,一个 Apache 实例可以服务于多个网站。使用 Apache 配置的每个域或单个站点,都会将访问者引导到网站对应的特定目录。只要您的服务器配置允许,就可以扩展配置更多项目,没有任何软件限制。
在本文中,我们将向您介绍在 Ubuntu 20.04 服务器上配置 Apache 虚拟主机的方法。我们将演示创建两个虚拟主机站点。
环境条件
本文基于以下环境:
- Ubuntu 20.04 服务器。
- 具有 sudo 权限的非 root 用户。
- 服务器上安装了 Apache。
第 1 步 – 创建网站目录
第一步是创建网站目录,用于保存每个网站的数据。
一般情况下,我们的网站项目使用/var/www
目录。我们将在该目录下为每个虚拟主机各创建一个目录。
使用下面的命令为每个网站创建根目录:
sudo mkdir -p /var/www/your_domain_1/public_html
sudo mkdir -p /var/www/your_domain_2/public_html
在实际操作的过程中,记得要将your_domain_1
、your_domain_2
替换成自己的域名。例如,如果您的域是 example.com,那么要创建的目录就是:
/var/www/example.com/public_html
第 2 步 – 授予权限
现在,我们已经为两个网站创建了目录,但他们的所有权默认归 Root 用户。如果想要普通用户也能够修改这些 Web 目录中的文件,可以使用以下命令更改目录的所有权:
sudo chown -R $USER:$USER /var/www/your_domain_1/public_html
sudo chown -R $USER:$USER /var/www/your_domain_2/public_html
另外,还应该修改相应的目录权限,以便可以对 Web 目录及其包含的所有文件和文件夹进行读取访问:
sudo chmod -R 755 /var/www
第 3 步 – 为每个虚拟主机创建一个默认页面
创建完网站目录后,就可以继续配置每个虚拟主机了。在第一个网站根目录your_domain_1
下,创建一个index.html
文件。
使用喜欢的编辑器创建 index.html 文件:
nano /var/www/your_domain_1/public_html/index.html
在该 index.html 文件中,添加下面的代码:
/var/www/your_domain_1/public_html/index.html
<html>
<head>
<title>Welcome to your_domain_1!</title>
</head>
<body>
<h1>Success! The your_domain_1 virtual host is working!</h1>
</body>
</html>
要在nano
中保存和关闭文件,请先按CTRL+X
,然后按 Y
保存文件,然后按ENTER
退出。
接下来,通过下面的命令将 index.html 文件复制到另一个网站根目录:
cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html
然后使用文本编辑器打开这个新文件并修改相关信息:
nano /var/www/your_domain_2/public_html/index.html
/var/www/your_domain_2/public_html/index.html
<html>
<head>
<title>Welcome to your_domain_2!</title>
</head>
<body> <h1>Success! The your_domain_2 virtual host is working!</h1>
</body>
</html>
保存并关闭此文件。
第 4 步 – 创建虚拟主机配置文件
每个虚拟主机配置文件对应不同的网站,并指示 Apache 服务器如何响应不同域名请求的网站文件。
Apache 默认有一个名为000-default.conf
的配置文件,可以通过复制此文件来为每个网站创建虚拟主机配置文件。
将默认配置文件复制为 your_domain_1.conf:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/your_domain_1.conf
请注意,默认的 Ubuntu 配置要求每个虚拟主机配置文件以.conf
结尾。
在文本编辑器中打开新创建的配置文件:
sudo nano /etc/apache2/sites-available/your_domain_1.conf
删除注释后,文件类似于:
/etc/apache2/sites-available/your_domain_1.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 端口)。
首先,将ServerAdmin
指令为站点管理员可以接收的电子邮件:
/etc/apache2/sites-available/your_domain_1.conf
ServerAdmin admin@your_domain_1
在此之后,添加两个额外的指令。第一个称为ServerName
,为虚拟主机的域名。第二个,称为ServerAlias
,定义了匹配该域名的其他名称。例如,如果将ServerName
指令设置为example.com
,在ServerAlias
指令下,设置为 www.example.com
,两者都将指向该服务器的 IP 地址。
将这两个指令添加到对应的配置文件中:
/etc/apache2/sites-available/your_domain_1.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_1
ServerName your_domain_1
ServerAlias www.your_domain_1
DocumentRoot /var/www/html
...
</VirtualHost>
接下来,更改网站的文档根目录位置。编辑DocumentRoot
指令以指向网址对应的目录:
/etc/apache2/sites-available/your_domain_1.conf
DocumentRoot /var/www/your_domain_1/public_html
配置完成后,看起来就像下面的样子:
/etc/apache2/sites-available/your_domain_1.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_1
ServerName your_domain_1
ServerAlias www.your_domain_1
DocumentRoot /var/www/your_domain_1/public_html
...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
保存并关闭文件。
然后,通过复制该配置文件来为另一个网站创建配置文件:
sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf
在编辑器中打开新的配置文件:
sudo nano /etc/apache2/sites-available/your_domain_2.conf
现在对该配置文件中的信息进行对应更改:
/etc/apache2/sites-available/your_domain_2.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_2
ServerName your_domain_2
ServerAlias www.your_domain_2
DocumentRoot /var/www/your_domain_2/public_html
...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
完成后保存并关闭文件。
第 5 步 – 启用虚拟主机配置文件
现在,我们已经创建了两个虚拟主机配置文件,还需要执行命令启用它们。
使用下面的命令来启用两个虚拟主机:
sudo a2ensite your_domain_1.conf
sudo a2ensite your_domain_2.conf
会有类似下面的输出,提醒您重新加载 Apache 服务器:
Output
Enabling site example.com.
To activate the new configuration, you need to run:
systemctl reload apache2
在重新加载 Apache 服务器之前,使用 a2dissite
命令禁用默认的配置文件 000-default.conf
:
sudo a2dissite 000-default.conf
Output
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
接下来,测试配置是否存在错误:
sudo apache2ctl configtest
会收到类似以下的输出:
Output. . .
Syntax OK
完成后,重新启动 Apache,以使这些更改生效。
sudo systemctl restart apache2
或者,可以使用以下命令检查服务器的状态:
sudo systemctl status apache2
现在,我们就在服务器上配置了两个网站。如果您使用的是真实域名,则可以跳过第 6 步,并继续执行第 7 步。如果您在本地测试配置,请按照第 6 步使用本地计算机测试设置。
第 6 步 – (可选)设置本地主机文件
如果没有真实的域名,可以通过修改本地电脑的 hosts 文件,将对应域名的访问指向服务器对应的虚拟主机目录。
如果使用的是 Mac 或 Linux 计算机,执行下面的命令:
sudo nano /etc/hosts
如果使用的是 Windows 计算机,请打开命令提示符并执行下面的命令:
notepad %windir%\system32\drivers\etc\hosts
在下面,添加服务器的公共 IP 地址,以及对应的虚拟主机域名。如下所示:
/etc/hosts
127.0.0.1 localhost
127.0.1.1 guest-desktop
your_server_IP your_domain_1
your_server_IP your_domain_2
配置完成后,我们在本地电脑访问两个域名时,就会访问服务器对应的网站目录。
保存并关闭文件。
第 7 步 – 测试配置
现在,已经完成了虚拟主机配置,通过浏览器访问对应的域名:
http://your_domain_1

测试访问另外一个域名:
http://your_domain_2

如果这两个网站都可以正常访问,说明我们已经成功在同一台服务器上配置了两个网站。
总结
综上所述,我们通过配置 Apache 虚拟主机,在同一台服务器上配置了两个虚拟主机网站。只要服务器配置允许,可以配置更多的虚拟主机。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-set-up-apache-virtual-hosts-on-ubuntu-20-04/