WEB应用之httpd基础入门(三)

  前文咱们聊到了httpd的路径别名、访问日志定义、basic认证配置,回顾请参考http://www.javashuo.com/article/p-eqqppcqs-hz.html;今天咱们来聊一聊httpd的虚拟主机和状态页的配置,前边咱们也提到了虚拟主机,所谓虚拟主机不外乎就是一个物理主机上存在多个虚拟站点;一般httpd的虚拟主机有三类,分别是基于ip的虚拟主机、基于端口的虚拟主机以及基于FQDN的虚拟主机;不难理解基于ip的虚拟主机就是以不一样IP来区分不一样的虚拟主机;基于端口的虚拟主机就是以不一样端口区分不一样的虚拟主机,基于fqdn的虚拟主机就是以不一样用户请求报文中的host首部来区分的虚拟主机;接下来咱们来看看httpd里怎么配置虚拟主机;html

  一、虚拟主机node

  httpd里虚拟主机的配置方法是由<virtualhost IP:PORT>  ……</virtualhost>配置块来配置;其中httpd2.2在启用虚拟主机配置前须要将其中心主机禁用,禁用方法很简单,就是把中心主机里的documentroot指令注释便可;在httpd2.4中,咱们就不须要去关闭中心主机,在配置了虚拟主机之后,中心主机天然失效,不须要人为手动注释;对于在中心主机里可配置的指令大多数均可以用于虚拟主机配置块中;用法和中心主机里配置几乎没有啥差异;windows

  示例:基于IP的虚拟主机实现centos

   提示:以上配置主要就是提供两个基于IP的虚拟主机,一个是192.168.0.98:80,一个是192.168.0.99:80的主机;咱们在对应目录下建立好主页文件,重载配置文件,这两个虚拟主机就能够生效了;浏览器

[root@test_node1-centos7 conf.d]# echo "this is a_com page ip is 192.168.0.98" > /vhost/www/html/a_com/index.html
[root@test_node1-centos7 conf.d]# echo "this is b_com page ip is 192.168.0.99" > /vhost/www/html/b_com/index.html
[root@test_node1-centos7 conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4a:bd:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.99/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe4a:bd74/64 scope link 
       valid_lft forever preferred_lft forever
[root@test_node1-centos7 conf.d]# ip addr add 192.168.0.98/24 dev ens33
[root@test_node1-centos7 conf.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:4a:bd:74 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.99/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.0.98/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe4a:bd74/64 scope link 
       valid_lft forever preferred_lft forever
[root@test_node1-centos7 conf.d]# httpd -t
Syntax OK
[root@test_node1-centos7 conf.d]# systemctl reload httpd
[root@test_node1-centos7 conf.d]# 

  提示:以上配置主要是给两个虚拟站点提供对应的主页文件,而后在原有的网卡上面加了一个新的ip192.168.0.98,这样配置后,咱们配置的虚拟主机就能够在浏览器上经过不一样的ip地址访问,获得不一样的主页响应;bash

 

   提示:能够看到咱们以不一样IP访问站点,获得的是不一样虚拟主机给咱们提供的主页文件,说明咱们配置的基于IP地址的虚拟主机没有什么问题;同时咱们也能够看这两个虚拟主机各自的访问日志文件;oop

   提示:不一样的站点,各自以不一样的访问日志和错误日志分别记录着各自站点访问日志和错误日志信息;ui

  示例:基于端口的虚拟主机实现this

   提示:以上配置在基于IP的虚拟主机配置上修改了下,两个虚拟主机都是基于192.168.0.99这个ip地址,分别监听在80和81两个端口上,咱们访问192.168.0.99:80就会匹配到a主机,拿到a主机的主页响应,访问192.168.0.99:81就会拿到b主机的主页响应;centos7

   提示:能够看到同一IP地址,访问不一样的端口,就以不一样的虚拟站点提供服务;

  示例:基于不一样FQDN的虚拟主机实现

   提示:以上配置两个虚拟主机都监听在192.168.0.99:80用户访问主要经过不一样的host请求首部来区分;以下

  在重载配置前,咱们先在windows上坐下host解析,模拟DNS解析,分别把www.a.com 和www.b.com 都解析成192.168.0.99

 

   提示:windows hosts解析文件在C:\Windows\system32\drivers\etc\ 名字为hosts文件,此文件语法同Linuxhosts文件语法相同,前边是ip地址 后面是主机名称或别名;以下

   提示:到此咱们就能够经过不一样的解析名称来访问不一样的虚拟站点

   提示:能够看到咱们以不一样解析名称来访问,获得不一样的虚拟主机响应,其实这中间就是用户键入不一样的host首部来区分不一样的虚拟站点;以下

 

   提示:用户的host请求首部是能够是其余字串,它这个host首部是不会被解析的,一般状况下是咱们在浏览器上键入什么字串,对应的host首部的值就是什么,只不过浏览器要把咱们键入的字串去解析成IP而后把对应的请求发送到去对应ip地址的主机上;为了更好的理解这一过程请看下面;

   提示:咱们在构造请求报文时,随便给了一个字串给Host请求首部,也是能够正常请求到主页的,这就说明host请求首部实质上只是用来区分不一样虚拟主机,它不用来解析;之因此在host首部没有被匹配成功的状况下,它响应a主机的页面,这是由于a主机的配置在最上面,默认状况下host首部没有被任何虚拟主机匹配就会以最上面的虚拟主机响应;这里还须要注意一点的是,httpd2.2在使用FQDN虚拟主机时,须要使用到listen指令和namevirtualhost ip:port 指令来指定虚拟主机监听的ip和端口信息;httpd2.4则能够不用使用namevirtualhost这个指令来指定;以下

   提示:以上是httpd2.2基于FQDN的虚拟主机配置示例;

   二、status页面配置说明

  httpd的状态页面上由httpd的status_module模块实现,在配置使用状态页面信息,首先须要确认该模块是否装载,确认方法以下:

   提示:httpd2.2和2.4的确认方法同样,若是可以列出status_module,说明该模块已经装载,若是没有被装载须要使用LoadModule  status_module  modules/mod_status.so 来装载便可;以上是httpd2.4确认结果,2.2的确认结果以下

 

   确认了模块装载了,接下来就是配置使用

  示例:httpd2.4配置status页面

   提示:状态页的配置主要是用location 来指定一个URI,而后在其下面配置sethandler 指令来指定匹配到的URI怎么处理,以上表示用server-status来处理,这里须要注意一点httpd的状态页面上status_module实现的,咱们在配置使用必须是server-status来处理,不能上其余名称;还须要说明的是该location能够配置在任何虚拟主机以及中心主机均可以,他都表示用server-status来处理,说白了就是显示状态页;

   提示:以上就是咱们刚才配置的location 对应uri 响应的内容;固然以上信息是比较私密的信息,一般状况下咱们只容许部分IP地址的主机查看,在httpd2.4上若是不是容许全部主机查看,只是部分主机查看,基于IP地址作访问控制的话,咱们须要将其访问控制的权限指令写到<requireall> ……</requireall>配置段中;

   示例:httpd2.2状态页面配置

   提示:httpd2.2和httpd2.4状态页的配置没有本质的不一样;

   提示:在httpd2.2的状态页上,要比httpd2.4信息少不少,从上面的提示看,它告诉咱们若是要显示全面的状态信息,咱们须要使用extendedstatus on指令,若是咱们须要更加全面的信息,能够选择把该指定配置server配置段中;

相关文章
相关标签/搜索