介绍
Apache Web服务器是在互联网上提供Web内容的最流行的方式。它占互联网上所有活动网站的一半以上,并且非常强大和灵活。 Apache将其功能和组件划分为可以单独自定义的各个单元。描述单个站点或域的基本单元称为 虚拟主机 。 使用虚拟主机,您可以使用一个服务器通过使用匹配机制托管单个接口或IP的多个域或站点。您配置对域的请求,以将访问者引导到保存该站点信息的特定目录。换句话说,您可以在单个服务器上托管多个网站。此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理负载。 在本教程中,您将在Debian 8服务器上设置两个Apache虚拟主机,根据访问的域为访问者提供不同的内容。先决条件
要完成本教程,您需要:- 一个带有具有sudo权限的非root用户的Debian 8服务器。您可以在使用Debian 8的初始服务器安装指南中设置具有这些权限的用户。
- Apache安装和配置,如如何在Debian 8上安装Linux,Apache,MySQL,PHP(LAMP) 。
example.com
和
test.com
创建虚拟主机,但您可以在执行过程中替换您自己的域或值。 要在您的服务器上指向您的域名,请按照我们的教程
如何使用DigitalOcean设置主机名 。 如果您没有可供播放的网域,可以使用
example.com
和
test.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.com
和
www.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
如果文件中没有语法错误或拼写错误,您将看到以下输出:
OutputEnabling site example.com.
To activate the new configuration, you need to run:
service apache2 reload
为了使更改生效,您必须重新加载Apache。但在你做之前,启用其他网站:
sudo a2ensite test.com.conf
您会看到类似的讯息,指出网站已启用:
OutputEnabling 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.com
和
test.com
任何请求,并将它们发送到您的服务器在
111.111.111.111
。 保存并关闭文件。现在你可以测试你的设置。当你确信工作正常时,从文件中删除两行。
第6步 - 测试您的结果
现在,您已配置虚拟主机,您可以通过访问您在Web浏览器中配置的域轻松地测试您的设置。访问http://example.com
的第一个网站,您会看到如下所示的网页:
同样,如果您可以访问
http://test.com
的第二个主机,您将看到为您的第二个网站创建的文件:
如果这两个网站都工作正常,您已经在同一台服务器上成功配置了两个虚拟主机。
注意 :如果您按照第5步中所示调整了家用计算机的主机文件,则可能需要删除现在添加的行,确认您的配置是否正常。
这将阻止您的主机文件填充实际不必要的条目。