前文我们聊到了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. 添砖加瓦:几种常见的数据摘要算法(MD5、CRC32、SHA1和SHA256)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  2. spring基于@Value绑定属Bean性失

    用spring注解@Value绑定属性失败 环境: eclipse Version: Luna Release (4.4.0) spring 4.0 Junit4 其他依赖包 描述: JsrDAO类, ...

  3. Spotlight 监控工具使用

    监控MySQL数据库性能的工具:Spotlight on MySQL    <转载> 我们的服务器数据库:是在windows2003上. 这款工具非常的花哨,界面很漂亮,自带报警. 1.创 ...

  4. ARTS 第 1 周

    每周一道算法.点评一篇英文技术文章.学习一个技术技巧.分享一个技术观点和思路 Algorithm 题目:两数和 给定一个整数数组,返回这两个数字的索引,使它们相加为一个指定的数. 因为是返回两个数字的 ...

  5. Golang: chan定义问题(7)

    通常都是定义读写双向的 chan,定义单向 chan 问题. 专栏的介绍可以参考 <GotchaGolang专栏>,代码可以看<宝库-Gotcha>. 通过 只写 chan 传 ...

  6. Nginx之常用基本配置(二)

    上一篇我们把nginx的主配置文件结构大概介绍了下,全局配置段比较常用的指令说了一下,http配置段关于http服务器配置指令介绍了下,以及有几个调优的指令,server_name的匹配机制,错误页面 ...

  7. 图解Python网络编程

    返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...

  8. 用ABAP 生成二维码 QR Code

    除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外,也可以通过使用二维码在线生成 ...

  9. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

  10. 2019-2020-2 20174318张致豪《网络对抗技术》Exp1 PC平台逆向破解

    Exp1_PC平台逆向破解 前期准备 一.逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...