介绍
Apache 网页服务器是互联网上提供网页内容的最流行的方式,占互联网上所有活跃网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件分为单个单元,可以独立定制,描述单个网站或域的基本单元称为 virtual host。
使用虚拟主机,您可以使用一个服务器来托管单个界面或IP的多个域或网站,通过使用匹配机制。您可以配置域请求,以将访问者导向某个特定目录,其中包含该网站的信息。
在本教程中,您将在 Debian 8 服务器上设置两个 Apache 虚拟主机,根据访问的域名为访问者提供不同的内容。
前提条件
要完成本教程,您将需要:
- 具有 sudo 特权的非根用户的 Debian 8 服务器. 您可以在我们的 Debian 8 初始服务器设置指南中设置具有这些特权的用户。
- Apache 已安装和配置,如在 如何在 Debian 8 上安装 Linux, Apache, MySQL, PHP (LAMP) 堆栈中所示。
在本指南中,我们将为 example.com
和 test.com
创建虚拟主机,但您可以在跟随时替换自己的域名或值。
如果你没有可用的域名来玩,你可以使用example.com
和test.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.com
和www.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.com
和test.com
请求,并将其发送到您的服务器在111.111.111
。
保存和关闭文件. 现在你可以测试你的设置. 当你确定事情正在工作时,从文件中删除两个行。
步骤6:测试你的结果
现在你已经配置了虚拟主机,你可以通过访问你在浏览器中配置的域来轻松地测试你的设置。访问第一个网站在http://example.com,你会看到一个看起来像这样的页面:
同样,如果你可以访问你的第二个主机在http://test.com,你会看到你为你的第二个网站创建的文件:
如果这两个网站都正常工作,那么您可以在同一个服务器上成功配置了两个虚拟主机。
<$>[注意] 注意:如果您根据步骤 5 所示调整了家用计算机的主机文件,您可能想要删除您现在确认配置工作后添加的行。
结论
您现在有一个单一的服务器处理两个单独的域名,您可以通过执行这些步骤来扩展此过程,以添加额外的虚拟主机。
对于Apache可以处理的域名数量,没有软件限制,所以可以尽可能多地创建您的服务器。
若要使用 Apache 來提供安全內容,請遵循教程 如何在 Debian 8 上使用 Apache 加密. 若要在您的 Web 應用程式前使用 Apache,請遵循 如何在 Debian 8 上使用 mod_proxy 使用 Apache 作為反向代理人。