httpd 虚拟主机的创建

简介:

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

1
2
IPv4 Domain     IPv4地址:0~65535端口
IPv6 Domain     IPv6地址:0~65535

例:172.16.13.1:41957  ==========192.168.60.99:80

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

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

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

1
# DocumentRoot /var/www/html

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

1
2
Listen 80
Listen 192.168.60.99:8080

查看监听的端口:

1
2
3
[root@stu13 ~] # netstat  -anpt| grep httpd
tcp        0   0    192.168.60.99:8080  0.0.0.0:*        LISTEN      4026 /httpd .worker
tcp        0   0 :::80                  :::*             LISTEN      4026 /httpd .worker

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

1
2
3
4
5
6
<VirtualHost 192.168.60.99:80>
   DocumentRoot    /web/vhosts/www1
   ServerName     bbs.9527du.com
   ErrorLog        / var /log/httpd/www1 .err
   CustomLog       /var/log/httpd/www1 .access  common
< /VirtualHost >

测试:

1
2
3
4
5
6
7
8
9
[root@stu13 ~] # curl  -I http://192.168.60.99/index.html
HTTP /1 .1 200 OK
Date: Wed, 13 Aug 2014 00:51:25 GMT
Server: Apache
Last-Modified: Mon, 11 Aug 2014 08:49:40GMT
ETag:  "1e-17-50056a2b04222"
Accept-Ranges: bytes
Content-Length: 23
Content-Type: text /html ; charset=UTF-8

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

1
2
3
4
5
6
<VirtualHost 192.168.60.99:8080>
   DocumentRoot    /web/vhosts/www2
   ServerName     www.9527du.com
   ErrorLog         /var/log/httpd/www2 .err
   CustomLog       /var/log/httpd/www2 .access  common
< /VirtualHost >

测试:

1
2
3
4
5
6
7
8
9
[root@stu13 ~] # curl -Ihttp://192.168.60.99:8080/index.html
HTTP /1 .1 200 OK
Date: Wed, 13 Aug 2014 01:20:24 GMT
Server: Apache
Last-Modified: Wed, 13 Aug 2014 01:05:05GMT
ETag:  "16-23-5007860eece9f"
Accept-Ranges: bytes
Content-Length: 35
Content-Type: text /html ; charset=UTF-8

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


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

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

1
    #DocumentRoot  /usr/local/httpd2.4/htdocs

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

1
2
3
4
5
6
<VirtualHost 192.168.60.99>
   DocumentRoot   /web/vhosts/www2
   ServerName    bbs.9527du.com
   ErrorLog     /var/log/httpd/www2 .err
   CustomLog    /var/log/httpd/www2 .access  common
< /VirtualHost >

测试

1
2
3
4
5
  [root@stu13bin] # curl -I http://192.168.60.99/index.html
HTTP /1 .1 403 Forbidden
Date: Wed, 13 Aug 2014 01:52:21 GMT
Server: Apache /2 .4.1 (Unix) PHP /5 .4.26
Content-Type: text /html ; charset=iso-8859-1

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

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

1
2
3
4
5
6
7
8
9
10
<VirtualHost 192.168.60.99>
   DocumentRoot   /web/vhosts/www2
   ServerName    bbs.9527du.com
   ErrorLog     /var/log/httpd/www2 .err
   CustomLog    /var/log/httpd/www2 .access  common
   <Directory  "web/vhosts/www2" >
       AllowOverride none
       Require  all  granted
   < /Directory >
< /VirtualHost >

(4)、测试

1
2
3
4
5
6
7
8
9
[root@stu13 bin] # curl -Ihttp://192.168.60.99/index.html
HTTP /1 .1 200 OK
Date: Wed, 13 Aug 2014 02:10:11 GMT
Server: Apache /2 .4.1 (Unix) PHP /5 .4.26
Last-Modified: Wed, 13 Aug 2014 01:05:05GMT
ETag:  "23-5007860eece9f"
Accept-Ranges: bytes
Content-Length: 35
Content-Type: text /html

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

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

1
2
3
基于IP地址虚拟主机               192.168.60.99:80
基于端口虚拟主机                 192.168.60.99:8080
基于域名的虚拟主机               web.9527du.com(它的IP地址是:192.168.60.99:80)

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

wKioL1Pq_B3gorwUAAGwgyK0shM573.jpg


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

1
2
GET  /image/mm .gif       服务器根据该首部就知道客户端请求的资源(uri)是什么
HOST:www.9527du.com     与httpd服务器中【ServerName】指令定义的主机名称做匹配如果匹配到                        ,客户端请求的就是该主机下的资源。

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

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

1
NameVirtualHost192.168.60.99:80

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

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

1
[root@stu13~] # echo "192.168.60.99 web.9527du.com" >> /etc/hosts

(3)、配置虚拟主机

1
2
3
4
5
6
<VirtualHost192.168.60.99:80>
    DocumentRoot  /web/vhosts/www3
    ServerName   web.9527du.com
    ErrorLog      /var/log/httpd/www3 .err
    CustomLog     /var/log/httpd/www3 .access  common
< /VirtualHost >

(4)、测试

添加测试网页

1
[root@stu13~] # echo "host is www3" > /web/vhosts/www3/index.html

访问测试

1
2
[root@stu13~] # curl -eI http://web.9527du.com/index.html
hostis www3

说明:

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

OK!!!!






     本文转自成长的小虫 51CTO博客,原文链接: http://blog.51cto.com/9528du/1539362 ,如需转载请自行联系原作者




相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
9月前
httpd配置虚拟主机三种方式——实验
httpd配置虚拟主机三种方式——实验
126 0
|
存储 缓存 负载均衡
配置Nginx虚拟主机(二)
⭐本文介绍⭐ 在企业信息化应用环境中,安全性不仅取决于硬件防护设备,系统加固、访问控制等基本措施,而且如何减少故障中断时间,提高存储及北方的完善性也是确保企业信息安全的重要措施。本文将进一步学习服务器缓存加速、高可用/负载均衡群集、服务器集中监控等高级安全应用。后续课程将采用最小化安装的CentOS7.3系统,安装系统时勾选"开发工具"选项,以此为基础搭建实现环境。
配置Nginx虚拟主机(二)
|
存储 缓存 负载均衡
配置Nginx虚拟主机(一)
⭐本文介绍⭐ 在企业信息化应用环境中,安全性不仅取决于硬件防护设备,系统加固、访问控制等基本措施,而且如何减少故障中断时间,提高存储及北方的完善性也是确保企业信息安全的重要措施。本文将进一步学习服务器缓存加速、高可用/负载均衡群集、服务器集中监控等高级安全应用。后续课程将采用最小化安装的CentOS7.3系统,安装系统时勾选"开发工具"选项,以此为基础搭建实现环境。
配置Nginx虚拟主机(一)
|
网络协议 前端开发 Apache
Apache配置虚拟主机
Apache配置虚拟主机
259 0
Apache配置虚拟主机
|
域名解析 应用服务中间件 Apache
Nginx-虚拟主机配置
Nginx-虚拟主机配置
324 1
Nginx-虚拟主机配置
|
网络安全
httpd服务的配置
httpd服务的配置
260 0
|
应用服务中间件 Apache nginx
|
应用服务中间件 Linux nginx
|
应用服务中间件 PHP nginx