如何在 Ubuntu 18.04 上设置 Apache 虚拟主机

介绍

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.comtest.com的请求,并将其发送到我们的服务器上.这就是我们想要的,如果我们不是实际上这些域的所有者,以测试我们的虚拟主机。

步骤七:测试你的结果

现在您已经配置了虚拟主机,您可以通过访问您在 Web 浏览器中配置的域进行测试:

1http://example.com

你应该看到一个看起来像这样的页面:

Apache virtual host example

您还可以访问您的第二页并查看您为第二个网站创建的文件。

1http://test.com

Apache virtual host test

如果这两个网站都按预期工作,那么您已经在同一个服务器上成功配置了 两个虚拟主机。

如果您调整了家用计算机的主机文件,您可能想要删除您现在添加的行,因为您已经验证了您的配置工作,这将防止您的主机文件填充不再需要的条目。

如果您需要访问这个长期,请考虑为您需要的每个网站添加一个域名,并将其设置为指向您的服务器(https://www.digitalocean.com/docs/networking/dns/)。

结论

如果你遵循,你现在应该有一个单一的服务器处理两个单独的域名. 你可以通过遵循我们上面描述的步骤来扩展这个过程,以创建额外的虚拟主机。

对于Apache可以处理的域名数量,没有软件限制,所以可以尽可能多地创建您的服务器。

Published At
Categories with 技术
comments powered by Disqus