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

介绍

Apache 网页服务器是互联网上提供网页内容的最流行的方式,占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

Apache将其功能和组件分为单个单元,可独立定制和配置,描述单个网站或域的基本单元称为虚拟主机

这些指定允许管理员使用一个服务器来托管单个接口或 IP 之外的多个域或网站,使用匹配机制。

每个配置的域将引导访问者到一个特定的目录,其中包含该网站的信息,从不表示相同的服务器也对其他网站负责。

在本指南中,我们将向您介绍如何在 Ubuntu 16.04 服务器上设置 Apache 虚拟主机。

前提条件

在开始本教程之前,您应该按照这里的步骤 1 至 4 所述 创建 sudo 允许的非root用户

您还需要安装Apache才能通过这些步骤工作. 如果您尚未这样做,您可以通过apt-get在您的服务器上安装Apache:

1sudo apt-get update
2sudo apt-get install apache2

完成这些步骤后,我们可以开始。

对于本指南的目的,我们的配置将为example.com创建一个虚拟主机,而为test.com创建另一个虚拟主机。

我们将在稍后展示如何编辑本地主机文件以测试配置,如果您正在使用虚假值,这将允许您从家用电脑测试您的配置,即使您的内容不会通过域名提供给其他访问者。

步骤 1 – 创建目录结构

我们将采取的第一个步骤是创建一个目录结构,该目录将包含我们将为访问者提供的网站数据。

我们的文档根(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 服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在所需的文件夹中创建内容。

步骤 3:为每个虚拟主机创建演示页

我们有我们的目录结构,让我们创建一些内容来服务。

我們只會進行演示,所以我們的頁面將非常簡單,我們只會為每個網站製作一個「index.html」頁面。

让我们从example.com开始,我们可以在编辑器中打开一个index.html文件,键入:

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>

保存并关闭文件,当你完成。

我们可以复制此文件以使用为基础我们的第二个网站通过键入:

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>

保存和关闭此文件,您现在有测试虚拟主机配置所需的页面。

步骤 4 – 创建新的虚拟主机文件

虚拟主机文件是指我们的虚拟主机的实际配置,并决定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

总的来说,我们的 virtualhost 文件应该是这样的:

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>

保存并关闭文件,当你完成。

步骤 5 – 启用新的虚拟主机文件

现在我们已经创建了我们的虚拟主机文件,我们必须启用它们。

我们可以使用a2ensite工具来启用我们的每个网站,如下:

1sudo a2ensite example.com.conf
2sudo a2ensite test.com.conf

接下来,禁用在000-default.conf中定义的默认网站:

1sudo a2dissite 000-default.conf

完成后,您需要重新启动 Apache 以使这些更改生效:

1sudo systemctl restart apache2

步骤 6 — 设置本地主机文件(可选)

如果您尚未使用您所拥有的实际域名来测试此过程,并且已经使用了一些示例域名,那么您至少可以通过在本地计算机上暂时修改主机文件来测试此过程的功能。

这将拦截您配置的域的任何请求,并将其指向您的服务器,就像DNS系统如果您使用注册的域一样。

请确保您在本地计算机上运行这些步骤,而不是您的服务器。

如果您在 Mac 或 Linux 计算机上,请通过键入编辑本地文件的管理权限:

1sudo nano /etc/hosts

如果您在 Windows 计算机上,您可以在这里 找到关于更改您的主机文件的说明

您需要添加的详细信息是您的VPS服务器的公共IP地址,然后是您想要使用的域名来访问该VPS。

对于我在本指南中使用的域名,假设我的VPS IP地址是203.0.113.10,我可以将以下行添加到我的主机文件的底部:

1[label /etc/hosts]
2127.0.0.1 localhost
3127.0.1.1 guest-desktop
4203.0.113.10 example.com
5203.0.113.10 test.com

这将导向我们计算机上的任何example.comtest.com请求,并将其发送到我们的服务器在203.0.113.10

保存并关闭文件。

步骤7:测试你的结果

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

1http://example.com

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

Apache virt host example

同样,如果你可以访问你的第二页:

1http://test.com

您将看到您为您的第二个网站创建的文件:

Apache virt host test

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

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

如果您需要长期访问,请考虑为您需要的每个网站购买一个域名,并将其设置为指向您的VPS服务器(https://www.digitalocean.com/community/articles/how-to-set-up-a-host-name-with-digitalocean)。

结论

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

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

Published At
Categories with 技术
comments powered by Disqus