介绍
Apache Web 服务器是为在互联网上服务网站的一种流行的方法. 截至 2019 年,它估计为所有活跃网站提供 29% 的服务,并为开发人员提供了强大性和灵活性。
使用Apache配置的每个域或个别网站 - 被称为虚拟主机
- 将导向访问者到一个特定目录,其中包含该网站的信息。
在本指南中,我们将向您介绍如何在Ubuntu 18.04服务器上设置Apache虚拟主机,在此过程中,您将学习如何为不同访客提供不同的内容,这取决于他们所要求的域名。
前提条件
在你开始这个教程之前,你应该 创建一个非根用户。
您还需要安装Apache才能通过这些步骤工作. 如果您尚未这样做,您可以通过apt
包方式在您的服务器上安装Apache:
1sudo apt update
2sudo apt install apache2
如果您想要更详细的说明以及防火墙设置,请参阅我们的指南 如何在Ubuntu 18.04上安装Apache Web Server。
对于本指南的目的,我们的配置将为example.com
创建一个虚拟主机,而为test.com
创建另一个虚拟主机。
如果您正在使用 DigitalOcean,您可以通过遵循产品文档 如何添加域来了解如何设置域。
我们将在稍后展示如何编辑本地主机文件以测试配置,如果您正在使用测试值,这将允许您从您的家庭计算机验证配置,即使您的内容不会通过域名提供给其他访问者。
步骤一:创建目录结构
我们将采取的第一个步骤是创建一个目录结构,该目录将包含我们将为访问者提供的网站数据。
我们的文档根
(Apache寻找内容的顶级目录)将被设置为/var/www
目录下的个别目录,我们将为我们计划创建的两个虚拟主机在这里创建一个目录。
在每个 these 目录中,我们将创建一个public_html
文件夹,该文件将包含我们的实际文件。
例如,对于我们的网站,我们将按照以下方式创建我们的目录. 如果您正在使用实际域或替代值,请为这些域更换突出的文本。
1sudo mkdir -p /var/www/example.com/public_html
2sudo mkdir -p /var/www/test.com/public_html
红色部分代表了我们希望从我们的VPS服务的域名。
步骤二:授权
现在我们有我们的文件的目录结构,但它们属于我们的根用户. 如果我们希望我们的普通用户能够修改我们的网页目录中的文件,我们可以通过这样做改变所有权:
1sudo chown -R $USER:$USER /var/www/example.com/public_html
2sudo chown -R $USER:$USER /var/www/test.com/public_html
$USER
变量将取代您当前登录的用户的值,就像您点击ENTER
时一样。
我们还应该修改我们的权限,以确保允许阅读访问一般的网页目录和其中的所有文件和文件夹,以便可以正确地服务页面:
1sudo chmod -R 755 /var/www
您的 Web 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在所需的文件夹中创建内容。
步骤三:为每个虚拟主机创建演示页
我们现在有我们的目录结构,让我们创建一些内容来服务。
为了演示目的,我们将为每个网站创建一个index.html
页面。
我们可以在文本编辑器中打开一个index.html
文件,在这种情况下我们会使用nano:
1nano /var/www/example.com/public_html/index.html
在此文件中,创建一个 HTML 文档,指示该网站链接到,如下:
1[label /var/www/example.com/public_html/index.html]
2<html>
3 <head>
4 <title>Welcome to Example.com!</title>
5 </head>
6 <body>
7 <h1>Success! The example.com virtual host is working!</h1>
8 </body>
9</html>
保存和关闭文件(在纳米,按CTRL
+X
然后Y
然后ENTER
)当你完成。
我们可以复制此文件以使用为基础我们的第二个网站通过键入:
1cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
然后我们可以打开文件并修改相关信息:
1nano /var/www/test.com/public_html/index.html
1[label /var/www/test.com/public_html/index.html]
2<html>
3 <head>
4 <title>Welcome to Test.com!</title>
5 </head>
6 <body> <h1>Success! The test.com virtual host is working!</h1>
7 </body>
8</html>
保存和关闭此文件,您现在有测试虚拟主机配置所需的页面。
第四步:创建新的虚拟主机文件
虚拟主机文件是指我们的虚拟主机的实际配置,并决定Apache Web 服务器如何响应各种域请求的文件。
Apache 配备了一个默认的虚拟主机文件,名为000-default.conf
,我们可以用它作为一个跳出点,我们将复制它来为每个域创建一个虚拟主机文件。
我们将从一个域开始,配置它,将其复制到我们的第二个域,然后进行一些需要的进一步调整。
创建第一个虚拟主机文件
首先,将文件复制到第一个域:
1sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
在 root 特权的编辑器中打开新文件:
1sudo nano /etc/apache2/sites-available/example.com.conf
删除评论后,文件将看起来像这样:
1[label /etc/apache2/sites-available/example.com.conf]
2<VirtualHost *:80>
3 ServerAdmin webmaster@localhost
4 DocumentRoot /var/www/html
5 ErrorLog ${APACHE_LOG_DIR}/error.log
6 CustomLog ${APACHE_LOG_DIR}/access.log combined
7</VirtualHost>
在此文件中,我们将定制我们第一个域的项目,并添加一些额外的指令. 这个虚拟主机部分匹配了在端口80上进行的任何请求,即默认的HTTP端口。
首先,我们需要将ServerAdmin
指令更改为电子邮件,网站管理员可以通过它接收电子邮件。
1ServerAdmin [email protected]
在此之后,我们需要添加两条指令。第一条指令,称为ServerName
,建立了应该匹配这个虚拟主机定义的基域。这很可能会是您的域。第二条指令,称为ServerAlias
,定义了进一步的名称,它们应该匹配,就好像它们是基本名称。这对于匹配您定义的主机有用,如www
:
1ServerName example.com
2ServerAlias www.example.com
我们唯一需要改变的虚拟主机文件是这个域的文档根位置,我们已经创建了所需的目录,所以我们只需要改变DocumentRoot
指令来反映我们创建的目录:
1DocumentRoot /var/www/example.com/public_html
完成后,我们的虚拟主机文件应该是这样的:
1[label /etc/apache2/sites-available/example.com.conf]
2<VirtualHost *:80>
3 ServerAdmin admin@example.com
4 ServerName example.com
5 ServerAlias www.example.com
6 DocumentRoot /var/www/example.com/public_html
7 ErrorLog ${APACHE_LOG_DIR}/error.log
8 CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>
在此时刻,保存并关闭文件。
复制第一个虚拟主机并定制为第二个域
现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要进行调整来创建第二个。
开始复制它:
1sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
在您的编辑器中打开新的 root 特权文件:
1sudo nano /etc/apache2/sites-available/test.com.conf
您现在需要修改所有信息,以便参考您的第二个域. 当您完成时,它应该看起来像这样:
1[label /etc/apache2/sites-available/test.com.conf]
2<VirtualHost *:80>
3 ServerAdmin admin@test.com
4 ServerName test.com
5 ServerAlias www.test.com
6 DocumentRoot /var/www/test.com/public_html
7 ErrorLog ${APACHE_LOG_DIR}/error.log
8 CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>
保存并关闭文件,当你完成。
步骤五:启用新的虚拟主机文件
现在我们已经创建了我们的虚拟主机文件,我们必须启用它们。
我們將使用「a2ensite」工具來啟用我們的每個網站. 如果您想閱讀更多關於這個脚本,您可以參考 `a2ensite' 文件 。
1sudo a2ensite example.com.conf
2sudo a2ensite test.com.conf
接下来,禁用在000-default.conf
中定义的默认网站:
1sudo a2dissite 000-default.conf
当你完成时,你需要重新启动Apache以使这些更改生效,并使用systemctl状态
来验证重启的成功。
1sudo systemctl restart apache2
2sudo systemctl status apache2
您的服务器现在应该设置为服务两个网站。
步骤六:设置本地主机文件(可选)
如果您尚未使用您所拥有的实际域名来测试此过程,并且已经使用了一些示例域名,那么您至少可以通过在本地计算机上暂时修改主机
文件来测试此过程的功能。
这将拦截您配置的域的任何请求,并将其指向您的VPS服务器,就像DNS系统如果您使用注册的域一样。
请确保您在本地计算机上运行这些步骤,而不是 VPS 服务器,您需要知道计算机的管理密码,或者是管理组成员。
如果您在 Mac 或 Linux 计算机上,请通过键入编辑本地文件的管理权限:
1[environment local]
2sudo nano /etc/hosts
如果您在 Windows 计算机上,您可以 在这里找到关于更改您的主机文件的说明。
您需要添加的详细信息是您的服务器的公共IP地址,然后是您想要使用的域名来访问该服务器。
使用本指南中使用的域名,并将您的服务器IP替换为your_server_IP
文本,您的文件应该是这样的:
1[environment local]
2[label /etc/hosts]
3127.0.0.1 localhost
4127.0.1.1 guest-desktop
5your_server_IP example.com
6your_server_IP test.com
保存并关闭文件。
这将导向我们计算机上的任何example.com
和test.com
的请求,并将其发送到我们的服务器上.这就是我们想要的,如果我们不是实际上这些域的所有者,以测试我们的虚拟主机。
步骤七:测试你的结果
现在您已经配置了虚拟主机,您可以通过访问您在 Web 浏览器中配置的域进行测试:
1http://example.com
你应该看到一个看起来像这样的页面:
您还可以访问您的第二页并查看您为第二个网站创建的文件。
1http://test.com
如果这两个网站都按预期工作,那么您已经在同一个服务器上成功配置了 两个虚拟主机。
如果您调整了家用计算机的主机文件,您可能想要删除您现在添加的行,因为您已经验证了您的配置工作,这将防止您的主机文件填充不再需要的条目。
如果您需要访问这个长期,请考虑为您需要的每个网站添加一个域名,并将其设置为指向您的服务器(https://www.digitalocean.com/docs/networking/dns/)。
结论
如果你遵循,你现在应该有一个单一的服务器处理两个单独的域名. 你可以通过遵循我们上面描述的步骤来扩展这个过程,以创建额外的虚拟主机。
对于Apache可以处理的域名数量,没有软件限制,所以可以尽可能多地创建您的服务器。