介绍
Apache HTTP 服务器是一个流行的开源 Web 服务器,为开发人员提供灵活性、功能和广泛的支持。Apache 服务器的配置不是在单个单一文件中进行的,而是通过模块化设计进行的,可以根据需要添加和修改新文件。
使用虚拟主机,一个Apache实例可以为多个网站提供服务. 使用Apache配置的每个域或单个网站将导向访问者到包含该网站信息的特定目录。
在本指南中,您将在 Ubuntu 20.04 服务器上设置 Apache 虚拟主机. 在此过程中,您将学习如何为不同的访问者提供不同的内容,具体取决于他们正在创建两个虚拟主机网站。
前提条件
在开始本教程之前,您将需要:
- 具有 sudo 特权的非根用户的 Ubuntu 20.04 服务器. 您可以使用我们的 初始服务器设置与 Ubuntu 20.04 指南来设置此设置。
- Apache 安装在服务器上。
<$>[info] 如果您正在使用DigitalOcean,您可以通过遵循我们的产品文档,如何添加域名(https://www.digitalocean.com/docs/networking/dns/how-to/add-domains/)来学习如何设置域名。
为了成功完成本教程,您将需要两个域名:
- A 包含 your_domain 指向您的服务器的公共 IP 地址的记录. 包含 www.your_domain 指向您的服务器的公共 IP 地址的记录.
对于其他供应商,请参阅其相关产品文档。 <$>
<$>[注] 注: 如果您现在没有域名,您可以在计算机上本地使用测试值。本教程的第6步将向您展示如何测试和配置测试值。
步骤 1 – 创建目录结构
第一步是创建一个目录结构,该目录将包含您将向访问者提供的网站数据。
您的 document root 是 Apache 寻找内容的顶级目录,将被设置为/var/www
目录下的个别目录,在这里为每个虚拟主机创建一个目录。
在每个目录中,您将创建一个public_html
目录。public_html
目录包含将向您的访问者提供的内容。这里命名为your_domain_1
和your_domain_2
的母目录将包含支持 Web 内容的脚本和应用程序代码。
使用这些命令,与您自己的域名,创建您的目录:
1sudo mkdir -p /var/www/your_domain_1/public_html
2sudo mkdir -p /var/www/your_domain_2/public_html
请确保将your_domain_1
和your_domain_2
替换为您自己的各自域名,例如,如果您的域名之一是 example.com,您将创建此目录结构: /var/www/example.com/public_html
。
步骤二:授予许可
您已经为您的文件创建了目录结构,但它们属于 root用户. 如果您希望您的普通用户能够在这些网页目录中修改文件,您可以使用以下命令更改所有权:
1sudo chown -R $USER:$USER /var/www/your_domain_1/public_html
2sudo chown -R $USER:$USER /var/www/your_domain_2/public_html
$USER
变量将取代您当前登录的用户的值,就像您按下ENTER
时一样。
您还应该修改您的权限,以确保阅读访问被允许到一般的网页目录和其中的所有文件和文件夹,以便可以正确地服务页面:
1sudo chmod -R 755 /var/www
您的 Web 服务器现在拥有提供内容所需的权限,您的用户应该能够在所需的文件夹中创建内容。
步骤 3:为每个虚拟主机创建默认页面
有了您的目录结构,您可以开始专注于每个单独的虚拟主机网站和该网站内的内容,开始为您的第一个网站创建一个index.html
页面,即your_domain_1
。
打开并使用您喜爱的文本编辑器创建index.html
文件,此示例使用nano
:
1nano /var/www/your_domain_1/public_html/index.html
在此文件中,创建一个HTML文件,向访问者显示他们所连接的网站:
1[label /var/www/your_domain_1/public_html/index.html]
2<html>
3 <head>
4 <title>Welcome to your_domain_1!</title>
5 </head>
6 <body>
7 <h1>Success! The your_domain_1 virtual host is working!</h1>
8 </body>
9</html>
要将文件保存并关闭在nano
,请开始按CTRL+X
。当被要求保存文件时,请按Y
,然后按ENTER
,当您完成退出。
接下来,通过键入来复制此文件作为您的第二个网站的基础:
1cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html
然后打开这个新文件并使用文本编辑器修改相关信息,就像以前一样:
1nano /var/www/your_domain_2/public_html/index.html
1[label /var/www/your_domain_2/public_html/index.html]
2<html>
3 <head>
4 <title>Welcome to your_domain_2!</title>
5 </head>
6 <body> <h1>Success! The your_domain_2 virtual host is working!</h1>
7 </body>
8</html>
现在每个网站都有一个页面,您可以使用它来测试虚拟主机配置。
步骤 4 – 创建新的虚拟主机文件
虚拟主机文件是指您的虚拟主机的实际配置,并决定Apache Web 服务器如何响应各种域请求的文件。
Apache 配备了默认的虚拟主机文件,名为 000-default.conf
. 您可以复制此文件,为您的每个域创建虚拟主机文件。
将默认配置文件复制到第一个域:
1sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/your_domain_1.conf
请注意,默认的 Ubuntu 配置要求每个虚拟主机文件都以.conf 结束。
在您喜爱的文本编辑器中打开新文件,使用 root权限:
1sudo nano /etc/apache2/sites-available/your_domain_1.conf
删除评论时,文件将类似于此:
1[label /etc/apache2/sites-available/your_domain_1.conf]
2<VirtualHost *:80>
3 ...
4 ServerAdmin webmaster@localhost
5 DocumentRoot /var/www/html
6 ...
7 ErrorLog ${APACHE_LOG_DIR}/error.log
8 CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>
在此文件中,定制您的第一个域的项目,并添加一些额外的指令. 此虚拟主机部分匹配任何在端口 `80 所做的请求,默认 HTTP 端口。
首先,将ServerAdmin
指令更改为电子邮件,网站管理员可以通过以下方式接收电子邮件:
1[label /etc/apache2/sites-available/your_domain_1.conf]
2ServerAdmin admin@your_domain_1
在此之后,添加两个额外的指令. 第一种,称为ServerName
,为虚拟主机定义建立了基础域。 第二种,称为ServerAlias
,定义了进一步的名称,它们应该匹配作为基础名称。 这对于匹配您定义的额外主机有用。 例如,如果您将ServerName
指令设置为example.com
,您可以将ServerAlias
定义为www.example.com
,并且两者都将指向该服务器的IP地址。
在ServerAdmin
行后,将这两个指令添加到配置文件中:
1[label /etc/apache2/sites-available/your_domain_1.conf]
2<VirtualHost *:80>
3 ...
4 ServerAdmin admin@your_domain_1
5 ServerName your_domain_1
6 ServerAlias www.your_domain_1
7 DocumentRoot /var/www/html
8 ...
9</VirtualHost>
接下来,更改此域的文档根的虚拟主机文件位置. 编辑DocumentRoot
指令,指向您为此主机创建的目录:
1[label /etc/apache2/sites-available/your_domain_1.conf]
2DocumentRoot /var/www/your_domain_1/public_html
以下是虚拟主机文件的例子,上面所做的所有调整:
1[label /etc/apache2/sites-available/your_domain_1.conf]
2<VirtualHost *:80>
3 ...
4 ServerAdmin admin@your_domain_1
5 ServerName your_domain_1
6 ServerAlias www.your_domain_1
7 DocumentRoot /var/www/your_domain_1/public_html
8 ...
9 ErrorLog ${APACHE_LOG_DIR}/error.log
10 CustomLog ${APACHE_LOG_DIR}/access.log combined
11 ...
12</VirtualHost>
保存并关闭文件。
创建您的第二个配置文件,通过从您的第一个虚拟主机网站复制文件:
1sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf
在您喜爱的编辑器中打开新文件:
1sudo nano /etc/apache2/sites-available/your_domain_2.conf
您现在需要修改所有信息,以便参考您的第二个域. 当您完成时,它应该看起来像这样:
1[label /etc/apache2/sites-available/your_domain_2.conf]
2<VirtualHost *:80>
3 ...
4 ServerAdmin admin@your_domain_2
5 ServerName your_domain_2
6 ServerAlias www.your_domain_2
7 DocumentRoot /var/www/your_domain_2/public_html
8 ...
9 ErrorLog ${APACHE_LOG_DIR}/error.log
10 CustomLog ${APACHE_LOG_DIR}/access.log combined
11 ...
12</VirtualHost>
保存并关闭文件,当你完成。
步骤 5 – 启用新的虚拟主机文件
现在你已经创建了虚拟主机文件,你必须启用它们。
您将使用a2ensite
工具来启用您的每个网站. 如果您想了解更多关于这个脚本的信息,您可以参阅a2ensite
文档(https://manpages.debian.org/jessie/apache2/a2ensite.8.en.html)。
使用以下命令启用您的虚拟主机网站:
1sudo a2ensite your_domain_1.conf
2sudo a2ensite your_domain_2.conf
对于两种网站都将有输出,类似于下面的示例,提醒您重新加载您的Apache服务器:
1[secondary_label Output]
2Enabling site example.com.
3To activate the new configuration, you need to run:
4 systemctl reload apache2
在重新加载服务器之前,请使用a2dissite
命令禁用在000-default.conf
中定义的默认网站:
1sudo a2dissite 000-default.conf
1[secondary_label Output]
2Site 000-default disabled.
3To activate the new configuration, you need to run:
4 systemctl reload apache2
接下来,测试配置错误:
1sudo apache2ctl configtest
应获得以下产出:
1[secondary_label Output]
2. . .
3Syntax OK
完成后,重新启动 Apache 以使这些更改生效。
1sudo systemctl restart apache2
可选地,您可以使用此命令检查所有这些更改后服务器的状态:
1sudo systemctl status apache2
如果您正在使用真正的域名,您可以跳过步骤 6 并转到步骤 7. 如果您正在本地测试配置,请按照步骤 6 学习如何使用本地计算机测试设置。
步骤 6 — (可选) 设置本地主机文件
如果您尚未使用您所拥有的实际域名来测试此过程,并且正在使用示例域名,您仍然可以通过在本地计算机上暂时修改主机
文件来测试虚拟主机网站的功能。
请确保您在本地计算机上运行这些步骤,而不是 VPS 服务器,您需要知道计算机的管理密码,或者是管理组成员。
如果您在 Mac 或 Linux 计算机上,请通过键入编辑本地文件的管理权限:
1[environment local]
2sudo nano /etc/hosts
如果您在 Windows 计算机上,请打开命令栏并键入:
1[environment local]
2notepad %windir%\system32\drivers\etc\hosts
您需要添加的详细信息是您的服务器的公共 IP 地址,然后是您想要使用的域名来访问该服务器。 使用本指南中使用的域名,并将您的服务器的 IP 代替为your_server_IP
文本,您的文件应该是这样的:
1[label /etc/hosts]
2127.0.0.1 localhost
3127.0.1.1 guest-desktop
4your_server_IP your_domain_1
5your_server_IP your_domain_2
这将导向您的计算机上的两个域的任何请求,并将其发送到您指定的IP地址的服务器。
保存并关闭文件。
步骤7:测试你的结果
现在您已经配置了虚拟主机,您可以通过访问您在 Web 浏览器中配置的域进行测试:
1http://your_domain_1
您还可以访问第二个主机页面并查看您为第二个网站创建的文件:
1http://your_domain_2
如果这两个网站都按预期工作,那么您可以在同一服务器上成功配置了两个虚拟主机。
<$>[注] 注: 如果您调整了本地计算机的主机文件,如本教程的第6步,您可能想要删除您现在确认配置工作后添加的行。
结论
你现在有一个单一的服务器处理两个单独的域名。你可以通过遵循我们上面描述的步骤来扩展这个过程,以添加额外的虚拟主机。