如何在Debian 8上设置Apache虚拟主机

Apache Web服务器是在互联网上提供Web内容的最流行的方式。它占互联网上所有活动网站的一半以上,并且非常强大和灵活。 Apache将其功能和组件分成单个单元,您可以...

介绍

Apache Web服务器是在互联网上提供Web内容的最流行的方式。它占互联网上所有活动网站的一半以上,并且非常强大和灵活。 Apache将其功能和组件划分为可以单独自定义的各个单元。描述单个站点或域的基本单元称为虚拟主机 。 使用虚拟主机,您可以使用一个服务器通过使用匹配机制托管单个接口或IP的多个域或站点。您配置对域的请求,以将访问者引导到保存该站点信息的特定目录。换句话说,您可以在单个服务器上托管多个网站。此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理负载。 在本教程中,您将在Debian 8服务器上设置两个Apache虚拟主机,根据访问的域为访问者提供不同的内容。

先决条件

要完成本教程,您需要: 在本指南中,我们将为example.comtest.com创建虚拟主机,但您可以在执行过程中替换您自己的域或值。 要在您的服务器上指向您的域名,请按照我们的教程如何使用DigitalOcean设置主机名 。 如果您没有可供播放的网域,可以使用example.comtest.com ,然后按照本教程的第5步配置本地hosts文件,将这些域映射到您的服务器的IP地址。这将允许您从本地计算机测试您的配置。

第1步 - 创建目录结构

我们将要采取的第一步是创建一个目录结构,其中包含我们将为访客提供的网站数据。 我们的文档根目录是Apache查找要查找内容的顶级目录 ,它将被设置为/var/www目录下的单个目录。我们将为我们将配置的每个虚拟主机创建一个目录。 在每个目录中,我们将创建一个名为public_html的文件夹,其中包含我们要提供的网页。 这为我们在未来部署更复杂的Web应用程序提供了更多的灵活性; public_html文件夹将保存我们要投放的网络内容,而父文件夹可以保存脚本或应用程序代码以支持网络内容。 使用以下命令创建目录:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
因为我们使用sudo创建目录,所以它们由我们的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变量使用您当前登录的用户的值,当您按ENTER 。 通过这样做,我们的普通用户现在拥有public_html子目录,我们将存储我们的内容。 我们还应该修改我们的权限,以确保允许对一般Web目录及其包含的所有文件和文件夹进行读取访问,以便可以正确提供页面。执行此命令可更改/var/www文件夹及其子文件夹的权限:
sudo chmod -R 755 /var/www
如果您是第一次管理Linux上的权限,请参阅本教程 。 您的网络服务器现在应具有提供内容所需的权限,您的用户应该能够在必要的文件夹中创建内容。让我们为每个网站创建一个HTML文件。 我们有我们的目录结构。让我们创建一些要投放的内容。

第2步 - 为每个虚拟主机创建默认页面

让我们为每个网站创建一个简单的index.html页面。这将帮助我们确保我们的虚拟主机以后正确配置。 让我们从example.com的网页开始。 使用以下命令编辑新的index.html文件:
nano /var/www/example.com/public_html/index.html
在此文件中,创建一个简单的HTML文档,指示访问者正在查看example.com的主页:
/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>
保存并在完成后关闭文件。 现在将此文件复制到test.com网站:
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
更改文件,使其引用example.com的test.com example.com
/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>
保存并关闭该文件。现在,您需要有测试虚拟主机配置所需的页面。接下来,让我们配置虚拟主机。

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

虚拟主机文件指定虚拟主机的实际配置,并指定Apache Web服务器如何响应各种域请求。 Apache提供了一个名为000-default.conf的默认虚拟主机文件,您可以将其用作跳转点。将此文件复制到第一个域:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
注意 :Debian 8中的默认Apache配置要求每个虚拟主机文件以.conf结尾。 在编辑器中打开新文件:
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指令更改为站点管理员可以通过其接收电子邮件的电子邮件。
/etc/apache2/sites-available/example.com.conf
ServerAdmin admin@example.com
接下来,我们需要添加两个新的指令。第一个称为ServerName ,为此虚拟主机定义建立基本域。 第二个名为ServerAlias ,定义应该匹配的其他名称,如同它们是基本名称一样。 这对于匹配您定义的其他主机很有用,因此www.example.com这两个主机都指向此服务器的IP地址, example.comwww.example.com都可以工作。 将这两个指令添加到您的配置文件中,紧跟在ServerAdmin行之后:
/etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        ServerName example.com
        ServerAlias www.example.com
        DocumentRoot /var/www/html
...
接下来,通过更改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
在编辑器中打开新文件:
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>
保存并关闭文件。 现在我们已经创建了虚拟主机文件,我们可以启用它们。

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

您已创建文件夹和虚拟主机配置文件,但Apache在激活它们之前不会使用它们。您可以使用a2ensite工具启用每个网站。 激活第一个网站:
sudo a2ensite example.com.conf
如果文件中没有语法错误或拼写错误,您将看到以下输出:
Enabling site example.com.
To activate the new configuration, you need to run:
  service apache2 reload
为了使更改生效,您必须重新加载Apache。但在你做之前,启用其他网站:
sudo a2ensite test.com.conf
您会看到类似的讯息,指出网站已启用:
Enabling site test.com.
To activate the new configuration, you need to run:
  service apache2 reload
接下来,使用a2dissite命令禁用在000-default.conf中定义的默认站点:
sudo a2dissite 000-default.conf
现在,重新启动Apache:
sudo systemctl restart apache2
现在已配置站点。让我们测试一下。如果您使用配置为指向服务器IP地址的真实域,则可以跳过下一步。但如果您的域尚未传播,或者您只是测试,请继续阅读,了解如何使用本地计算机测试此设置。

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

如果您没有使用您拥有的实际域名来测试此过程,而是使用了一些示例域,您至少可以通过临时修改本地计算机上的hosts文件来测试此过程的功能。 这将拦截您配置的域的任何请求,并将它们指向您的VPS服务器,就像DNS系统将使用注册域一样。这只会从您的计算机工作,但只有用于测试目的。 请确保您在本地计算机上执行这些步骤,而不是您的VPS服务器。您还需要知道本地计算机的管理密码或成为管理组的成员。 如果您使用的是Mac或Linux计算机,请通过键入以下内容来编辑具有管理权限的本地文件:
sudo nano /etc/hosts
如果您在Windows上,请使用管理权限打开命令提示符,并键入:
notepad %windir%\system32\drivers\etc\hosts
一旦打开文件,请添加一行,将服务器的公共IP地址映射到每个域名,如下例所示:
/ etc / hosts
127.0.0.1   localhost
...

111.111.111.111 example.com
111.111.111.111 test.com
这将指示您的计算机上的example.comtest.com任何请求,并将它们发送到您的服务器在111.111.111.111 。 保存并关闭文件。现在你可以测试你的设置。当你确信工作正常时,从文件中删除两行。

第6步 - 测试您的结果

现在,您已配置虚拟主机,您可以通过访问您在Web浏览器中配置的域轻松地测试您的设置。访问http://example.com的第一个网站,您会看到如下所示的网页: Apache example.com结果 同样,如果您可以访问http://test.com的第二个主机,您将看到为您的第二个网站创建的文件: Apache test.com结果 如果这两个网站都工作正常,您已经在同一台服务器上成功配置了两个虚拟主机。 注意 :如果您按照第5步中所示调整了家用计算机的主机文件,则可能需要删除现在添加的行,确认您的配置是否正常。 这将阻止您的主机文件填充实际不必要的条目。

结论

您现在有一个服务器处理两个单独的域名。您可以按照以下步骤扩展此过程以添加其他虚拟主机。 Apache没有软件限制Apache可以处理的域名数量,所以随意制作尽可能多的服务器能够处理。 要使用Apache提供安全内容,请按照如何在Debian 8上使用Let's Encrypt来保护Apache 。 要在您的Web应用程序前使用Apache,请按照如何在Debian 8上使用Apache作为反向代理与mod_proxy