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

  1、虚拟主机

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

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

  提示:以上配置主要就是提供两个基于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地址访问,得到不同的主页响应;

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

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

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

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

  提示:可以看到同一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的虚拟主机配置示例;

  2、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配置段中;

WEB应用之httpd基础入门(三)的更多相关文章

  1. WEB应用之httpd基础入门(一)

    前文我们聊了下http协议web服务的一些常识和httpd服务器软件三种响应模型的简单介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12515075.ht ...

  2. WEB应用之httpd基础入门(二)

    前文我们聊了下httpd的一些基础设置,聊了下httpd的配置文件格式,长连接.mpm的配置以及访问控制基于文件路径和URL管控,回顾请参考https://www.cnblogs.com/qiuhom ...

  3. WEB应用之httpd基础入门(四)

    前文我们聊到了httpd的虚拟主机实现,状态页的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12570900.html:今天我们来聊一聊后面的常用基础配 ...

  4. WEB应用之httpd基础入门(五)

    前文我们聊到了httpd的启动用户和相关权限的说明,资源压缩配置.https的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12593675.html:今 ...

  5. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  6. C#基础入门 三

    C#基础入门 三 类 类使用class关键字进行声明,前面加一个访问修饰符,public class car{} 访问修饰符:修师傅可以用来修饰类和类成员等,控制它们的可见度 修饰符关键字分别为:pu ...

  7. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(三)-创建Data Transfer Object 版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...

  8. Web安全之Web 安全介绍与基础入门知识

    web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...

  9. Linux系统WEB服务之Nginx基础入门

    一.Nginxi简介 Nginx是什么?它是一个开源.高性能的WEB服务器软件和代理服务器软件,由俄罗斯人Igor Sysoev 开发实现.它的功能主要分三类,第一是它作为一个WEB服务软件使用:第二 ...

随机推荐

  1. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  2. Jquery 实现原理深入学习(3)

    前言 1.总体结构 √ 2.构建函数 √ 3.each功能函数实现 √ 4.map功能函数实现 √ 5.sizzle初步学习 6.attr功能函数实现 7.toggleClass功能函数实现(好伤) ...

  3. USB描述符(转)

    //============================================================================// 文件名: USBDESC.C// 用 ...

  4. 1、【Spark】Spark安装

    本文基于的环境 Red Hat Linux Enterprise 7 x86_64 jdk 1.7.0_79 Python 2.7Spart spark-1.5.2-bin-hadoop2.6 官方要 ...

  5. tcpdump常用方法

    tcpdump -i eth0监视制定网络接口的数据包 tcpdump host 10.13.1.135监视所有10.13.1.135主机收到和发出的数据包 tcpdump src host 10.1 ...

  6. Vue.js——学习笔记(一)

    Vue-自学笔记 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅 ...

  7. 什么是x86什么是x64 它们有什么区别

    1.内存寻址不同: 32位系统,最大支持3.5G内存,如果在32位系统中使用4G或更大的内存,电脑最多只可以识别3.4G左右可用,而64位系统最大可以支持128G大内存. 2.运算速度不同: 64位系 ...

  8. kafka知识整理

    title: kafka知识整理 date: 2019-06-18 10:59:46 categories: MQ tags: kafka --- 转载自:https://www.cnblogs.co ...

  9. 基于vue开发的在线付费课程应用

    最近在弄一个付费课程的应用,主要有微信登录,支付和自定义分享,在开发过程中遇到的坑,这里做一下记录 文章主要有以下几点 使用库简介 微信登录解决 微信支付解决 微信自定义分享解决 页面前进后退数据状态 ...

  10. Nuxt简单使用Google/Baidu Analyze

    博客地址: https://www.seyana.life/post/17 具体账号注册方法和绑定方法可以去到官网下,都有相应的指南, 一般设置也比较简单,只需要把对应js代码添加到head中即可, ...