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

介绍

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

Apache将其功能和组件分为单个单元,可以独立定制,描述单个网站或域的基本单元称为 virtual host

使用虚拟主机,您可以使用一个服务器来托管单个界面或IP的多个域或网站,通过使用匹配机制。您可以配置域请求,以将访问者导向某个特定目录,其中包含该网站的信息。

在本教程中,您将在 Debian 8 服务器上设置两个 Apache 虚拟主机,根据访问的域名为访问者提供不同的内容。

前提条件

要完成本教程,您将需要:

在本指南中,我们将为 example.comtest.com 创建虚拟主机,但您可以在跟随时替换自己的域名或值。

如果你没有可用的域名来玩,你可以使用example.comtest.com并按照本教程的步骤5来配置你的本地主机文件来将这些域名绘制到你的服务器的IP地址。

步骤 1 – 创建目录结构

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

我们的 document root 是 Apache 寻找内容的顶级目录,将被设置为/var/www目录下的个别目录,我们将为我们配置的每个虚拟主机创建一个目录。

在每个目录中,我们将创建一个名为public_html的文件夹,它将包含我们想要服务的网页,这为我们提供了一点更多的灵活性,以便在未来如何部署更复杂的网页应用程序;public_html文件夹将包含我们想要服务的网页内容,而母文件夹可以包含脚本或应用程序代码来支持网页内容。

使用以下命令创建目录:

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

由于我们用sudo创建了目录,所以它们属于我们的 root 用户,如果我们希望我们的常规用户能够在我们的 web 目录中修改文件,我们会更改所有权,如下:

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

如果您是新手在 Linux 上管理权限,请参阅 此教程

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

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

步骤 2:为每个虚拟主机创建默认页面

让我们为每个网站创建一个简单的index.html页面,这将有助于我们确保我们的虚拟主机在以后得到正确的配置。

让我们从example.com的页面开始,用以下命令编辑一个新的index.html文件:

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

在此文件中,创建一个简单的HTML文档,表示访问者正在浏览example.com的首页:

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>

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

现在将此文件复制到test.com网站:

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

更改文件,以便它引用test.com作为example.com的引用:

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>

保存并关闭此文件. 你现在有必要测试虚拟主机配置的页面. 接下来,让我们配置虚拟主机。

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

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

Apache 配备了一个默认的虚拟主机文件,名为000-default.conf,您可以将其用作跳出点。

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

<$>[注] : Debian 8 中的默认 Apache 配置要求每个虚拟主机文件都以 .conf 结束。

在您的编辑器中打开新文件:

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

该文件将看起来有点像下面的示例,加上一些额外的评论:

 1[label /etc/apache2/sites-available/example.com.conf]
 2<VirtualHost *:80>
 3
 4        ServerAdmin webmaster@localhost
 5        DocumentRoot /var/www/html
 6
 7        ErrorLog ${APACHE_LOG_DIR}/error.log
 8        CustomLog ${APACHE_LOG_DIR}/access.log combined
 9
10</VirtualHost>

此虚拟主机匹配在端口 `80 所做的任何请求,即默认 HTTP 端口. 让我们对此配置进行一些更改,并添加一些新指令。

首先,将ServerAdmin指令更改为电子邮件,该网站管理员可以通过它接收电子邮件。

1[label /etc/apache2/sites-available/example.com.conf]
2ServerAdmin [email protected]

接下来,我们需要添加两个新指令。第一个,称为ServerName,为这个虚拟主机定义建立了基础域。第二个,称为ServerAlias,定义了应该匹配的基础名称的进一步名称。这对您定义的额外主机的匹配是有用的,所以example.comwww.example.com都起作用,只要这两个主机都指向该服务器的IP地址。

将这两个指令添加到配置文件中,就在ServerAdmin行后:

1[label /etc/apache2/sites-available/example.com.conf]
2<VirtualHost *:80>
3
4        ServerAdmin webmaster@localhost
5        ServerName example.com
6        ServerAlias www.example.com
7        DocumentRoot /var/www/html
8...

接下来,通过更改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

在您的编辑器中打开新文件:

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>

保存并关闭文件。

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

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

你已经创建了文件夹和虚拟主机配置文件,但Apache不会使用它们,直到你激活它们。

启动第一站:

1sudo a2ensite example.com.conf

如果您的文件中没有语法错误或打字错误,您会看到以下输出:

1[secondary_label Output]
2Enabling site example.com.
3To activate the new configuration, you need to run:
4  service apache2 reload

为了让您的更改生效,您必须重新加载Apache,但在您这样做之前,请启用其他网站:

1sudo a2ensite test.com.conf

您将看到一个类似的消息,表明该网站已启用:

1[secondary_label Output]
2Enabling site test.com.
3To activate the new configuration, you need to run:
4  service apache2 reload

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

1sudo a2dissite 000-default.conf

现在,重新启动 Apache:

1sudo systemctl restart apache2

网站现在已经配置好了. 让我们测试它们. 如果您正在使用配置为指向服务器的 IP 地址的真实域名,您可以跳过下一步. 但如果您的域名尚未推广,或者您只是在测试,请继续阅读以了解如何使用本地计算机测试此设置。

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

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

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

请确保您在本地计算机上执行这些步骤,而不是 VPS 服务器,您还需要知道本地计算机的管理密码或成为管理组成员。

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

1[environment local]
2sudo nano /etc/hosts

如果您在 Windows 上,请打开具有管理权限的命令栏,然后键入:

1[environment local]
2notepad %windir%\system32\drivers\etc\hosts

打开文件后,添加一行,将服务器的公共 IP 地址映射到每个域名中,如下示例所示:

1[label /etc/hosts]
2127.0.0.1 localhost
3...
4
5111.111.111.111 example.com
6111.111.111.111 test.com

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

保存和关闭文件. 现在你可以测试你的设置. 当你确定事情正在工作时,从文件中删除两个行。

步骤6:测试你的结果

现在你已经配置了虚拟主机,你可以通过访问你在浏览器中配置的域来轻松地测试你的设置。访问第一个网站在http://example.com,你会看到一个看起来像这样的页面:

Apache example.com result

同样,如果你可以访问你的第二个主机在http://test.com,你会看到你为你的第二个网站创建的文件:

Apache test.com result

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

<$>[注意] 注意:如果您根据步骤 5 所示调整了家用计算机的主机文件,您可能想要删除您现在确认配置工作后添加的行。

结论

您现在有一个单一的服务器处理两个单独的域名,您可以通过执行这些步骤来扩展此过程,以添加额外的虚拟主机。

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

若要使用 Apache 來提供安全內容,請遵循教程 如何在 Debian 8 上使用 Apache 加密. 若要在您的 Web 應用程式前使用 Apache,請遵循 如何在 Debian 8 上使用 mod_proxy 使用 Apache 作為反向代理人

Published At
Categories with 技术
comments powered by Disqus