前文我们聊到了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. sql问题处理

    批量杀死MySQL连接 select concat('KILL ',id,';') from information_schema.processlist where Info like 'selec ...

  2. sphinx + mysql 全文索引配置

    参考地址 http://v9.help.phpcms.cn/html/2010/search_0919/35.html http://blog.sina.com.cn/s/blog_705e4fdc0 ...

  3. javascript中变量命名规则

    前言 变量的命名相对而言没有太多的技术含量,今天整理有关于变量命名相关的规则,主要是想告诉大家,虽然命名没有技术含量,但对于个人编码,或者说一个团队的再次开发及阅读是相当有用的.良好的书写规范可以让你 ...

  4. qt creator源码全方面分析(3)

    目录 项目文件分析 qtcreator.pro 包含qtcreator.pri Qt版本判断 包含doc.pri 源码组织架构 指定dist文件列表 qbs配置 指定架构和平台 指定基础名 指定lin ...

  5. python递归用法

    需求:4的阶乘 4*3*2*1计算.通过递归算法,c=4*getnums(4-1),然后调用自己本身的函数,形成递归,就等于3*getnums(3-1),2*getnums(2-1),依次递归调用,最 ...

  6. 前端每日实战:119# 视频演示如何用纯 CSS 创作一个接扎啤的动画(内含2个视频)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/rZeOQp 可交互视频 此视频是可 ...

  7. pycharm专业版激活破解(亲测有效)

    完成破解步骤,亲测有效! 1.打开路径,修改hosts文件:C:\Windows\System32\drivers\etc 找到hosts文件打开 最后一行添加这行代码:   0.0.0.0 acco ...

  8. Go coding in go way(用Go的思维去coding)

    本文是Tony Bai在2017年第三届GopherChina大会上所作,来源如下 https://tonybai.com/2017/04/20/go-coding-in-go-way/ 一.序 今天 ...

  9. day07深浅copy与流程控制

    目录:流程控制 0:补充(了解) 短路运算:偷懒原则,偷懒到哪个位置,就把当前位置的值返回 深浅copy 1.循环之while循环 循环的语法与基本使用 死循环与效率问题 循环的应用 退出循环的两种方 ...

  10. seo搜索优化技巧02-seo问答推广怎么做?

    问答推广就是以用户的​‌‌角度去提问,这些问题内容就是用户搜索想要知道的.简单来说通过第三方平台站在用户的角度去帮助客户解答问题,同时附带自身的品牌和产品信息就是问答推广. 常见的问答平台有百度知道. ...