Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件分解为可以单独定制的单个单元。描述单个站点或域的基本单元称为虚拟主机。
使用虚拟主机,您可以使用一个服务器通过匹配机制从单个接口或IP托管多个域或站点。您配置域的请求以将访问者定向到包含该站点信息的特定目录。换句话说,您可以在一台服务器上托管多个网站。只要您的服务器能够支撑的起来。
在本教程中,您将在Debian 8服务器上设置两个Apache虚拟主机,根据访问者访问的域向访问者提供不同的内容。
要完成本教程,您需要:
1、一台Debian 8的服务器
2、一个可以使用sudo
命令的非root
账户
3、服务器安装了Apache
在本教程中,我们会为创建虚拟主机example.com
和test.com
,在实际的操作过程中,请将两个示例的域名,替换成您自己的域名,并且域名要解析到您的服务器。
如果您没有可供使用的域,也可以使用example.com
和test.com
,但是要按照本教程的第五个步骤,配置本地主机文件,将这两个域名映射到服务器的IP地址。
我们要采取的第一步是创建一个目录,该目录将保存我们将为访问者提供的站点数据。
这是目录(存储站点数据)都是要存放在/var/www
的目录下面。我们将会为,每个虚拟主机创建一个目录,然后我们再对这些目录进行配置。
在每个目录中,我们将创建一个名为的文件夹public_html
,用于保存我们要提供的网页。这使我们在将来部署更复杂的Web应用程序方面具有更大的灵活性; 该public_html
文件夹将保存我们要提供的Web内容,父文件夹可以保存脚本或其他程序代码。
使用以下命令创建目录:
$ sudo mkdir -p /var/www/example.com/public_html
$ sudo mkdir -p /var/www/test.com/public_html
由于我们使用sudo
创建了目录,因此它们归root用户所有。如果我们希望我们设置的普通用户能够修改我们网站目录中的文件,我们需要设置权限,如下所示:
$ 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目录及其包含的所有文件和文件夹的读写,以便可以正确地提供页面。执行此命令可更改/var/www
文件夹及其子项的权限:
$ sudo chmod -R 755 /var/www
您的Web服务器现在应该具有提供内容所需的权限,并且您的用户应该能够在必要的文件夹中创建内容。现在让我们为每个站点创建一个HTML文件。
让我们为每个网站创建一个简单的index.html
页面。这有助于我们确保稍后正确配置虚拟主机。
让我们从example.com
的首页开始。使用nano
或者其他您喜欢的编辑器辑index.html
文件:
$ nano /var/www/example.com/public_html/index.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>
完成后保存并关闭文件。
现在将此文件复制到test.com
站点的目录下:
$ cp /var/www/example.com/public_html/index.html /var/www/test.com/public_html/index.html
然后编辑器复制过去的index.html
文件:
$ nano /var/www/test.com/public_html/index.html
在/var/www/test.com/public_html/index.html
将Example.com
替换成Test.com
:
<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
,您可以把它当做模板。复制并修改文件名:
$ 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
添加站点管理员的邮件,这样管理员接收到邮件。
ServerAdmin admin@example.com
接下来,我们需要添加两个新指令。在ServerName
后面填上您的域名,,第二个名为ServerAlias
,定义了应该匹配的其他名称,就好像它们是基本名称一样。这是匹配您定义额外的主机非常有用,这样example.com
与www.example.com
都能访问到服务器。
将这两个指令添加到/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>
保存并关闭文件。
同样的,我们就配置test.com.conf
:
$ sudo cp /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-available/test.com.conf
打开并编辑test.com.conf
文件:
$ sudo nano /etc/apache2/sites-available/test.com.conf
修改完成后,您的/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
如果文件中没有语法错误或拼写错误,您将看到以下输出:
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个步骤。但是,如果您没有域名,或者您只是进行测试,请继续看第5个步骤。
如果您没有域名,或者您只是进行测试,我们可以修改本地计算机的hosts
文件。
这将拦截您配置的域的任何请求并将它们指向您的VPS服务器,就像DNS系统在您使用注册域名是所做的那样。这只能在您的计算机上运行,并且仅用于测试目的。
确保在本地计算机上执行这些步骤,而不是在VPS服务器上执行这些步骤。您还需要知道本地计算机的管理密码或成为管理组的成员。
如果您使用的是Mac或Linux计算机,请输入以下命令编辑具有管理权限的本地文件:
$ sudo nano /etc/hosts
如果您在Windows上,请打开具有管理权限的命令提示符并输入:
c:\> notepad %windir%\system32\drivers\etc\hosts
打开/etc/hosts
文件后,输入以下内容,就可以将服务器的公共IP地址映射到每个域名,如以下示例所示:
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
。
保存并关闭文件。现在您可以测试您的设置。
现在您已配置了虚拟主机,您可以通过转到在Web浏览器中配置的域轻松测试您的设置。访问第一个网站, http://example.com
您将看到如下所示的页面:
同样,如果您可以访问第二个主机http://test.com
,您将看到为第二个站点创建的文件:
如果这两个站点都运行良好,则您已在同一服务器上成功配置了两个虚拟主机。
注意:请不要随意修改hosts
文件,否则容易出现问题,在完成本教程后,您有跟着第5个步骤修改了hosts
文件,请将添加的内容删除!
现在您的这台服务器处理两个独立的域名。如果您需要在Windows上搭建Apache环境,可以参考腾讯云实验基于 Windows 搭建 AMP (Apache/PHP/MySQL) 环境的相关课程。
参考文献:《How To Set Up Apache Virtual Hosts on Debian 8》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。