如何设置Ubuntu的16.04截至Apache的虚拟主机

Apache Web服务器是服务于互联网上的网页内容最流行的方式。 Apache在通过使用一个名为“虚拟主机”的机制从一台服务器为多个域的能力。如果虚拟主机为每个域配置正确,Web服务器可以正确地将流量路由到相应的文件,具体视申请域名。在本指南中,我们将演示如何在Ubuntu 16.04服务器上配置Apache虚拟主机。

介绍

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

Apache将其功能和组件划分为可以独立定制和配置的各个单元。 描述个人网站或域的基本单位叫做virtual host

这些指定允许管理员使用一个服务器通过使用匹配机制托管单个接口或IP的多个域或站点。 这是任何人寻找托管一个VPS以上的多个网站相关。

配置的每个域都会将访问者引导到保存该站点信息的特定目录,而不会指示同一服务器也负责其他站点。 此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理负载。

在本指南中,我们将向您介绍如何在Ubuntu 16.04 VPS上设置Apache虚拟主机。 在此过程中,您将了解如何根据所请求的域名向不同的访问者投放不同的内容。

先决条件

在开始本教程之前,您应该创建一个非root用户在这里第1步-4描述。

您还需要安装Apache才能完成这些步骤。 如果你还没有这样做的话,你可以得到通过安装在服务器上的Apache apt-get

sudo apt-get update
sudo apt-get install apache2

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

对于本指南的目的,我们的配置会为虚拟主机example.com ,另一个用于test.com 这些将在整个指南中引用,但您应该在替换您自己的域或值,同时遵循。

要了解如何设置你的域名与DigitalOcean ,请点击此链接。 如果没有可用域一起玩,你可以使用虚拟值。

如果使用虚拟值,我们将演示如何编辑本地主机文件以测试配置。 这将允许您从家用计算机测试配置,即使您的内容将无法通过域名访问其他访问者。

第一步 - 创建目录结构

我们将要采取的第一步是创建一个目录结构,其中包含我们将为访客提供的网站数据。

我们的document root (Apache着眼于寻找内容服务于顶级目录)将被设置为下各个目录/var/www目录。 我们将在这里为我们计划制作的两个虚拟主机创建一个目录。

在每个目录中,我们将创建一个public_html ,将举行我们的实际文件的文件夹。 这给我们在我们的主机的一些灵活性。

例如,对于我们的网站,我们将使我们的目录像这样:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

红色部分表示我们希望从我们的VPS提供的域名。

第二步 - 授予权限

现在我们有我们的文件的目录结构,但他们是我们的root用户所有。 如果我们希望我们的普通用户能够修改我们的web目录中的文件,我们可以通过这样做更改所有权:

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

$USER变量将带您当前登录的用户的价值,当你按下回车键。 通过这样做,我们的普通用户现在拥有public_html子目录,我们将存储我们的内容。

我们还应该修改我们的权限一点,以确保允许读取访问一般的Web目录及其包含的所有文件和文件夹,以便页面可以正确提供:

sudo chmod -R 755 /var/www

您的网络服务器现在应具有提供内容所需的权限,您的用户应该能够在必要的文件夹中创建内容。

第三步 - 为每个虚拟主机创建演示页面

我们有我们的目录结构。 让我们创建一些要投放的内容。

我们只是为了示范,所以我们的网页将很简单。 我们只是要做出index.html页为每个站点。

让我们先从example.com 我们可以打开一个index.html键入在我们的编辑文件:

nano /var/www/example.com/public_html/index.html

在此文件中,创建一个简单的HTML文档,指示其所连接的站点。 我的文件看起来像这样:

/var/www/example.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Example.com!</title>
  </head>
  <body>
    <h1>Success!  The example.com virtual host is working!</h1>
  </body>
</html>

保存并在完成后关闭文件。

我们可以通过键入以下内容复制此文件以用作第二个网站的基础:

cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html

然后我们可以打开文件并修改相关的信息:

nano /var/www/test.com/public_html/index.html
/var/www/test.com/public_html/index.html
<html>
  <head>
    <title>Welcome to Test.com!</title>
  </head>
  <body> <h1>Success!  The test.com virtual host is working!</h1>
  </body>
</html>

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

第四步 - 创建新的虚拟主机文件

虚拟主机文件是指定我们的虚拟主机的实际配置的文件,并指示Apache Web服务器如何响应各种域请求。

Apache附带一个名为默认的虚拟主机文件000-default.conf ,我们可以作为一个跳点使用。 我们将复制它以为每个域创建一个虚拟主机文件。

我们将从一个域开始,配置它,将其复制到我们的第二个域,然后进行所需的进一步调整。 Ubuntu默认配置要求每个虚拟主机文件中结束.conf

创建第一个虚拟主机文件

首先复制第一个域的文件:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

使用root权限在编辑器中打开新文件:

sudo nano /etc/apache2/sites-available/example.com.conf

文件将看起来像这样(我删除了这里的意见,使文件更平易近人):

/etc/apache2/sites-available/example.com.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指令,该网站管理员可以接收电子邮件通过电子邮件。

ServerAdmin admin@example.com

在此之后,我们需要添加两个指令。 第一,所谓的ServerName ,建立基本域应符合此虚拟主机的定义。 这很可能是您的网域。 第二,称为ServerAlias ,定义进一步名称,好像他们是基本名称应该匹配。 这是匹配您定义的主机,如用www

ServerName example.com
ServerAlias www.example.com

我们需要为基本虚拟主机文件更改的唯一其他事情是此域的文档根目录的位置。 我们已经创建了我们需要的目录,因此我们只需要改变DocumentRoot指示,以反映我们创建的目录:

DocumentRoot /var/www/example.com/public_html

总的来说,我们的虚拟主机文件应该看起来像这样:

/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并关闭文件。

复制第一个虚拟主机并为第二个域自定义

现在我们已经建立了第一个虚拟主机文件,我们可以通过复制该文件并根据需要调整它来创建第二个虚拟主机文件。

首先复制它:

sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf

在编辑器中以root权限打开新文件:

sudo nano /etc/apache2/sites-available/test.com.conf

您现在需要修改所有信息以引用您的第二个域。 当你完成后,它可能看起来像这样:

/etc/apache2/sites-available/test.com.conf
<VirtualHost *:80>
    ServerAdmin admin@test.com
    ServerName test.com
    ServerAlias www.test.com
    DocumentRoot /var/www/test.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

保存并在完成后关闭文件。

第五步 - 启用新的虚拟主机文件

现在我们已经创建了虚拟主机文件,我们必须启用它们。 Apache包括一些工具,允许我们这样做。

我们可以使用a2ensite工具,以使我们的每一个这样的网站的:

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

接下来,禁用定义的默认站点000-default.conf

sudo a2dissite 000-default.conf

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

sudo systemctl restart apache2

在其他的文档,你也可以用来看一个例子service的命令:

sudo service apache2 restart

该命令仍然可以工作,但它可能不会给你看惯了其他系统上的输出,因为现在各地的systemd的一个包装systemctl

第六步 - 设置本地主机文件(可选)

如果你没有使用你自己来测试此过程,并使用一些例如域被代替实际的域名去过,你至少可以通过临时修改测试这个过程的功能, hosts本地计算机上的文件。

这将拦截您配置的域的任何请求,并将它们指向您的VPS服务器,就像DNS系统将使用注册域一样。 这只会从您的计算机工作,但只是有用的测试目的。

确保您在本地计算机上操作这些步骤,而不是您的VPS服务器。 您将需要知道计算机的管理密码或以其他方式成为管理组的成员。

如果您使用的是Mac或Linux计算机,请通过键入以下内容来编辑具有管理权限的本地文件:

sudo nano /etc/hosts

如果你是一个Windows机器上,你可以找到改变您的主机文件的说明在这里。

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

对于我这个指南中使用,假设我的VPS IP地址域111.111.111.111 ,我可以在以下几行添加到我的主机文件的底部:

/ etc / hosts
127.0.0.1   localhost
127.0.1.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

这将直接对任何请求example.comtest.com我们的电脑上,并在它们发送到我们的服务器111.111.111.111 这是我们想要的,如果我们实际上不是这些域的​​所有者,以测试我们的虚拟主机。

保存并关闭文件。

第七步 - 测试你的结果

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

http://example.com

您应该看到如下所示的页面:

Apache virt主机示例

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

http://test.com

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

Apache主机测试

如果这两个站点的工作得很好,你已经成功地在同一台服务器上配置两个虚拟主机。

如果您调整了家用计算机的主机文件,则可能需要删除现在添加的行,确认您的配置是否正常。 这将阻止您的主机文件填充实际不必要的条目。

如果你需要访问这个长期的,考虑你需要在每个站点购买一个域名,并设置它指向您的VPS服务器

结论

如果你遵循,你现在应该有一个单一的服务器处理两个单独的域名。 您可以按照上述步骤展开此过程,以创建其他虚拟主机。

Apache没有软件限制Apache可以处理的域名数量,所以随意制作尽可能多的服务器能够处理。