介绍
Apache Web服务器是在互联网上提供Web内容的最流行的方式。 它占互联网上所有活动网站的一半以上,并且非常强大和灵活。
Apache将其功能和组件划分为可以独立定制和配置的各个单元。 描述个人网站或域的基本单位叫做virtual host
。
这些指定允许管理员使用一个服务器通过使用匹配机制托管单个接口或IP的多个域或站点。 这是任何人寻找托管一个VPS以上的多个网站相关。
配置的每个域都会将访问者引导到保存该站点信息的特定目录,而不会指示同一服务器也负责其他站点。 此方案是可扩展的,没有任何软件限制,只要您的服务器可以处理负载。
在本指南中,我们将指导您如何在Ubuntu 14.04 VPS上设置Apache虚拟主机。 在此过程中,您将了解如何根据所请求的域名向不同的访问者投放不同的内容。
先决条件
在开始本教程之前,您应该创建一个非root用户在这里第1步-4描述。
您还需要安装Apache才能完成这些步骤。 如果你还没有这样做的话,你可以得到通过安装在服务器上的Apache apt-get
:
sudo apt-get update
sudo apt-get install apache2
这些步骤完成后,我们可以开始了。
对于本指南的目的,我的配置会为虚拟主机example.com
,另一个用于test.com
。 这些将在整个指南中引用,但您应该在替换您自己的域或值,同时遵循。
要了解如何设置你的域名与DigitalOcean ,请点击此链接。 如果没有可用域一起玩,你可以使用虚拟值。
如果使用虚拟值,我们将演示如何编辑本地主机文件以测试配置。 这将允许您从家用计算机测试配置,即使您的内容将无法通过域名访问其他访问者。
第一步 - 创建目录结构
我们将要采取的第一步是创建一个目录结构,其中包含我们将为访客提供的网站数据。
我们的document root
(Apache着眼于寻找内容服务于顶级目录)将被设置为下各个目录/var/www
目录。 我们将在这里为我们计划制作的两个虚拟主机创建一个目录。
在每个目录中,我们将创建一个public_html
,将举行我们的实际文件的文件夹。 这给我们在我们的主机的一些灵活性。
例如,对于我们的网站,我们将使我们的目录像这样:
sudo mkdir -p /var/www/example.com/public_html sudo mkdir -p /var/www/test.com/public_html
红色部分表示我们希望从我们的VPS提供的域名。
第二步 - 授予权限
现在我们有我们的文件的目录结构,但他们是我们的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目录及其包含的所有文件和文件夹,以便页面可以正确提供:
sudo chmod -R 755 /var/www
您的网络服务器现在应具有提供内容所需的权限,您的用户应该能够在必要的文件夹中创建内容。
第三步 - 为每个虚拟主机创建演示页面
我们有我们的目录结构。 让我们创建一些要投放的内容。
我们只是为了示范,所以我们的网页将很简单。 我们只是要做出index.html
页为每个站点。
让我们先从example.com
。 我们可以打开一个index.html
键入在我们的编辑文件:
nano /var/www/example.com/public_html/index.html
在此文件中,创建一个简单的HTML文档,指示其所连接的站点。 我的文件看起来像这样:
<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com virtual host is working!</h1> </body> </html>
保存并在完成后关闭文件。
我们可以通过键入以下内容复制此文件以用作第二个网站的基础:
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
<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
,我们可以作为一个跳点使用。 我们将复制它以为每个域创建一个虚拟主机文件。
我们将从一个域开始,配置它,将其复制到我们的第二个域,然后进行所需的进一步调整。 Ubuntu默认配置要求每个虚拟主机文件中结束.conf
。
创建第一个虚拟主机文件
首先复制第一个域的文件:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
使用root权限在编辑器中打开新文件:
sudo nano /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
,定义进一步名称,好像他们是基本名称应该匹配。 这是匹配您定义的主机,如用www
:
ServerName example.com ServerAlias www.example.com
我们需要为基本虚拟主机文件更改的唯一其他事情是此域的文档根目录的位置。 我们已经创建了我们需要的目录,因此我们只需要改变DocumentRoot
指示,以反映我们创建的目录:
DocumentRoot /var/www/example.com/public_html
总的来说,我们的虚拟主机文件应该看起来像这样:
<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
在编辑器中以root权限打开新文件:
sudo nano /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 sudo a2ensite test.com.conf
完成后,需要重新启动Apache以使这些更改生效:
sudo service apache2 restart
您很可能会收到类似以下内容的讯息:
* Restarting web server apache2
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
这是一条不会影响我们网站的无害消息。
第六步 - 设置本地主机文件(可选)
如果你没有使用你自己来测试此过程,并使用一些例如域被代替实际的域名去过,你至少可以通过临时修改测试这个过程的功能, hosts
本地计算机上的文件。
这将拦截您配置的域的任何请求,并将它们指向您的VPS服务器,就像DNS系统将使用注册域一样。 这只会从您的计算机工作,但只是有用的测试目的。
确保您在本地计算机上操作这些步骤,而不是您的VPS服务器。 您将需要知道计算机的管理密码或以其他方式成为管理组的成员。
如果您使用的是Mac或Linux计算机,请通过键入以下内容来编辑具有管理权限的本地文件:
sudo nano /etc/hosts
如果你是一个Windows机器上,你可以找到改变您的主机文件的说明在这里。
您需要添加的详细信息是您的VPS服务器的公共IP地址,后面是您要用于访问该VPS的域。
对于我这个指南中使用,假设我的VPS IP地址域111.111.111.111
,我可以在以下几行添加到我的主机文件的底部:
127.0.0.1 localhost 127.0.1.1 guest-desktop 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
您将看到您为第二个网站创建的文件:
如果这两个站点的工作得很好,你已经成功地在同一台服务器上配置两个虚拟主机。
如果您调整了家用计算机的主机文件,则可能需要删除现在添加的行,确认您的配置是否正常。 这将阻止您的主机文件填充实际不必要的条目。
如果你需要访问这个长期的,考虑你需要在每个站点购买一个域名,并设置它指向您的VPS服务器 。
结论
如果你遵循,你现在应该有一个单一的服务器处理两个单独的域名。 您可以按照上述步骤展开此过程,以创建其他虚拟主机。
Apache没有软件限制Apache可以处理的域名数量,所以随意制作尽可能多的服务器能够处理。