怎么搭建虚拟Web主机

Linux如何搭建Apache网站服务(三)

前言:通过前面的两篇文档我们已经基本上了解了Apache(httpd)网站服务的基本搭建,接下来让我们进一步了解httpd服务器的访问控制和虚拟Web主机的构建等相关知识。

一、httpd服务的访问控制(以下是以httpd-2.4为例,版本不同配置内容也有所差异)

作用:

l 控制对网站资源的访问

l 为特定的网站目录添加访问授权

常用访问控制方式:

l 客户机地址限制

l 用户授权限制

1.客户机地址限制

使用Require配置项实现访问控制,按先后顺序限制,可以根据主机名或IP地址来决定是否允许客户端访问。在httpd服务器的主配置文件(/usr/local/httpd/conf/httpd.conf)的、、、

配置段中均可以使用Require配置项来控制客户端的访问。使用Require配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是IP地址、网络地址、主机名或域名,使用“all”时表示任意地址。

Require配置项的常见语法

l Require all granted:表示允许所有主机访问

l Require all denied:表示拒绝所有主机访问

l Require local:表示仅允许本地主机访问

l Require [not] host :表示允许或拒绝指定主机或域访问

l Require [not] ip :表示允许或拒绝指定IP地址或网段访问

例如:只希望IP地址为192.168.1.100的主机能够访问/usr/local/httpd/htdocs网页目录下的内容。如下图:(修改完配置文件记得重启服务)

说一个比较绕的东西,就是在定义限制策略时,多个不带not的Require配置语句之间是或的关系,即任意一条Require配置语句满足条件均可以访问。若既出现了不带not的Require配置语句,又出现了带not的Require配置语句,则语句之间是与的关系,即同时满足所有Require配置语句才可以访问。

再举一个拒绝的例子,例如,只希望禁止来自192.168.0.0/24和192.168.1.0/24两个网段的主机访问,但允许其他任何主机访问。如下图:(修改完配置文件记得重启服务)

注意:在使用not禁止访问时要将其置于容器中,并在容器中指定相应的限制策略。

当未被授权的客户机访问网站目录时,将会被拒绝访问,不同的浏览器中,拒绝的消息可以略有差异,通常都是提示为403错误。如下图:

2.用户授权限制

包含认证(Authentication)和授权(Authorization)两个过程,认证是指识别用户身份的过程,授权是指允许特定用户访问特定目录区域的过程。

Httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httpd之前添加“--enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证,而基本认证是httpd服务的基本功能,不需要预先配置特别的选项。(以下都是以基本认证为例,对/usr/local/httpd/htdocs网页内容添加用户授权限制)

1)创建用户认证数据文件

Httpd的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。

使用htpasswd工具时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件。

示例:执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为webadmin的用户信息。

若省略“-c”选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。

2)添加用户授权配置

有了授权用户账号以后,还需要修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置哪些用户访问。

示例:只允许“.awspwd”数据文件中的用户访问网页。如下图:

上图所示配置项的含义如下:

l AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示

l AuthType:设置认证类型,Basic表示基本认证

l AuthUserFile:设置用于保存用户账号、密码的认证文件路径

l Require valid-user:要求只有认证文件中的合法用户才能访问。其中,valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如webadmin)。

注意:用户访问授权与主机访问控制同时设置时,设置的主机访问控制优先生效。

3)验证用户访问授权

当再次访问网站的默认首页时,浏览器会首先弹出认证对话框。如下图所示,只有输入正确的用户名和密码才能查看网页,否则拒绝访问。

二、构建虚拟Web主机

什么是虚拟Web主机

l 在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用整个服务器。其目的是为了充分利用服务器的硬件资源,提高资源的利用率。

httpd支持的虚拟主机类型

l 基于域名的虚拟主机:为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的。这是使用最为普遍的虚拟Web主机类型

l 基于IP地址的虚拟主机:为每个虚拟主机使用不同的域名,且各自对应不同的IP地址。这种方式需要为服务器配备多个网络接口,因此应用并不是非常广泛。

l 基于端口的虚拟主机:这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用了不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问,非常不方便用户的访问。

在上述几种虚拟Web主机中,基于域名的虚拟主机是使用最为广泛的,所以我们接下来重点了解一下基于域名的虚拟主机。

1.基于域名的虚拟主机

下面以实现两个虚拟Web主机“www.test1.com”和“www.test2.com”为例,使用一台httpd服务器搭建,IP地址为192.168.1.1。具体构建过程如下。

1)为虚拟机提供域名解析

这里可以采用编辑/etc/hosts文件或者安装DNS服务器两种方式来实现。

编辑hosts文件很简单,就写两行对应的解析记录。如下图:

使用DNS服务器解析域名需要搭建DNS服务器,搭建DNS服务器的步骤前面有文章已经详细介绍过了,在这里就不赘述了(想了解的可以在作者的主页查找《Linux如何搭建DNS服务器》这篇文档),这里我们只说一下配置文件的主要编辑内容。在主配置文件named.conf中添加test1.com和test2.com两个区域;然后在各区域数据文件中均设置“www-->192.168.1.1”的A记录。确认客户机能够正确解析www.test1.com和www.test2.com对应的IP地址。如下图:

2)为虚拟主机准备网页文档

为每个虚拟Web主机准备网站目录及网页文档。为了测试方便,分别为每个虚拟Web主机提供包含不同内容的首页文件。如下图:

3)添加虚拟主机配置

启用基于域名的虚拟Web主机,需要配置一下几个方面的内容:

l 虚拟主机区域:使用......区域配置文件,为每个虚拟Web主机建立独立的配置内容。其中至少应该包括虚拟主机的网站名称、网页根目录的配置项,其他(如管理邮箱、访问日志等)配置项可根据实际需要添加。

l 目录权限:使用......区域配置,为每个虚拟Web主机的网站目录设置访问权限,如允许任何人访问。目录访问可以继承其父目录的授权许可,因此可以采取直接为父目录授权访问权限的方法来简化配置。

当虚拟Web主机的数量较多时,建议使用独立的虚拟主机配置文件,然后在httpd.conf文件中通过Include加载这些配置。这样可以将对httpd.conf文件的改动减少至最少,更方便配置内容的维护。如下图:

4)测试——在客户机浏览器分别访问虚拟Web主机

确认能够看到不同的网页内容,如下图。

2.基于IP地址、基于端口的虚拟主机

基于IP地址或基于端口的虚拟主机的过程与基于域名的虚拟主机类似,也需要先提前提供域名解析、准备网页文档,再调整httpd配置、重启httpd服务,然后在客户机中访问虚拟主机进行测试。其中最主要的区别是,不同类型的虚拟主机在httpd.conf文件中的配置内容略有不同。

1)基于IP地址的虚拟主机

对于基于IP地址的虚拟主机,每个虚拟Web主机各自使用不同的IP地址,但都是通过同一台httpd服务器对外提供Web服务。所以,用来支撑这些虚拟web主机的服务器也就需要有大量的网络接口及IP地址,在实际应用中往往不太方便,因此应用不是太广泛。

配置基于IP地址的虚拟web主机时,需要在每个虚拟web主机的virtualHost配置项中指定各自域名所对应的IP地址。这里我们还是以test1.com和test2.com为例,配置区别如下图所示。

注意:需要事先添加网卡(网络接口),然后分别配置不同的IP,其他配置与基于域名的虚拟主机基本相同。

2)基于端口的虚拟主机

基于端口的虚拟主机通常指用于同一个Web站点,其针对的网站名称、IP地址往往是相同的,但通过不同的TCP端口来提供访问不同网页内容的服务入口。在浏览器中访问非80端口的Web服务时,需要指出服务器的端口号。如:httpd://网站名称:端口号

配置基于端口的虚拟web主机时,需要通过多个Listen配置项来指定要监听的TCP端口号,每个虚拟web主机的VirtualHost配置中需同时指定IP地址和端口号。如下图所示:

然后在/usr/local/httpd/conf/httpd.conf配置文件中指定端口,也可以在/usr/local/httpd/conf/extra/httpd-vhosts.conf文件中添加下面两行内容来指定端口(就是随便找个地方添加一下就行,别太随便)。

到这里,Apache网站服务器的搭建基本就完成了,完了就是各种关于服务器的优化问题了。关于优化,我后面找些文档给大家分享一下。

####### 本节完 #######

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181218A0J5PX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券