天天看点

httpd 虚拟主机的创建

    Httpd 服务器是:C/S 架构的,通常客户端与服务端都不会在同一台主机上,那么意味客户端与服务端的数据通讯是跨网络的。那么服务端与客户端是如何解决数据通讯问题呢。使用:基于socket机制借助于IPv4或IPv6协议实现不同主机进程间数据通讯的。Socket地址格式如下:

例:172.16.13.1:41957  《==========》192.168.60.99:80

IP地址是用来标识跟网络上的主机的,端口号是标识该主机的用户空间的应用程序的地址;这样使用 IP +端口号,就可以找到指定主机的指定应用程序了。Httpd服务器的虚拟主机是调整 IP + 端口号的不同组合实现基于端口的虚拟主机和基于IP地址的虚拟主机的。如:

一、设置虚拟主机前的配置;

(1)、  注释掉主配置文件中的【DocumentRoot】定义的网页文档目录

(2)、在主配置中设置监听的端口与所使用的IP地址;

查看监听的端口:

二、  配置基于IP的虚拟主机;

测试:

三、 匹配基于端口的虚拟主机;

说明:httpd2.4还要做网页文件目录的访问控制,否则创建虚拟机失败。

四、在httpd 2.4 版本建立虚拟主机

(1)、注释掉主配置文件中【DocumentRoot】定义的网页文档存在目录

(2)、虚拟主机配置如下

测试

说明:http的状态码为:403 Forbidden。无权访问资源

(3)、给虚拟主机的网页存放目录增加访问控制

(4)、测试

五、创建基于主机名的虚拟主机。IP地址和端口也不变化。主机名称发生变化。

在浏览器中访问 http://web.9527du.com/index.htm,首先会去联系DNS域名解析服务器解析 web.9527du.com 域名解析服务器会把解析结果返回给客户端。浏览器就使用IP地址访问该域名对应的主机的资源。但是,web服务器有三台虚拟主机:

    问题:基于主机名的虚拟主机的IP地址端口号与基于IP地址的虚拟主机是相同的。浏览器是使用DNS解析后的IP地址去联系对应的web服务器的,在浏览器中输入:http://web.9527du.com/index.html就访问到基于域名的虚拟主机了,而没有访问到基于IP地址的虚拟主机中的资源呢?其实,客户端从服务器获取资源是通过 HTTP协议的首部来交互的。如下图所述:

httpd 虚拟主机的创建

    说明:数据包中封装了HTTP协议的头部信息,客户端与服务端的数据交互是通过HTTP协议定义的很多首部来交互数据的。如下面http的首部。

    这也就是为什么,基于IP地址的虚拟主机的socket地址与基于域名的虚拟主机的socket相同,访问到的虚拟主机是基于域名的虚拟主机上的资源而不是访问基于IP地址的虚拟主机上的资源。

(1)、开启基于域名的虚拟主机

   注意:httpd 2.4 版本没有该指令。直接是打开基于域名的虚拟主机的功能的。

(2)、为了测试,在/etc/hosts文件中添加一行

(3)、配置虚拟主机

添加测试网页

访问测试

说明:

    如果使用的httpd版本是2.4的话,一定要添加网页文件目录的访问控制。

OK!!!!

继续阅读