2018-06-25 httpd-2.4的配置和httpd的反向代理

1、新特性

  • 新特性
    MPM支持运行为DSO机制;以模块形式按需加载
    event MPM生产环境可用
    异步读写机制
    支持每模块及每目录的单独日志级别定义
    每请求相关的专用配置
    增强版的表达式分析式
    毫秒级持久连接时长定义
    基于FQDN的虚拟主机不需要NameVirutalHost指令
    新指令,AllowOverrideList
    支持用户自定义变量
    更低的内存消耗
  • 修改了一些配置机制
    不再支持使用Order, Deny, Allow来做基于IP的访问控制
  • 新模块
    (1) mod_proxy_fcgi
    FastCGI Protocol backend for mod_proxy
    (2) mod_remoteip
    Replaces the apparent client remote IP address and hostname for the request with the IP address list presented by a proxies or a load balancer via the request headers.
    (3) mod_ratelimit
    Provides Bandwidth Rate Limiting for Clients

2、CentOS 7 httpd程序环境

CentOS 7:httpd-2.4
安装方法:rpm,编译安装
Rpm安装程序环境:

配置文件和httpd-2.2没有区别
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
模块相关的配置文件:/etc/httpd/conf.modules.d/*.conf,httpd-2.2中没有这个文件
systemd unit file:/usr/lib/systemd/system/httpd.service
主程序文件:
/usr/sbin/httpd
httpd-2.4支持MPM的动态切换
日志文件:
/var/log/httpd
access_log:访问日志
error_log:错误日志
站点文档:
/var/www/html
模块文件路径:没有变化
/usr/lib64/httpd/modules
服务控制:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

3、httpd-2.4配置

  • 切换使用的MPM
vim /etc/httpd/conf.modules.d/00-mpm.conf 
httpd-2.2中是修改vim /etc/sysconfig/httpd文件,两者有区别
ab -c 100 -n 1000 http://172.18.21.107/  ---测试一下event MPM模式性能,发现性能和prefork差不多

因为httpd-2.4是基于模块化的,所以编译安装时不需要像httpd-2.2一样安装三种模式下的三个程序,每个程序都需要编译安装一次。

  • 修改主目录
vim /etc/httpd/conf/httpd.conf 
DocumentRoot "/app/website1"
<directory /app/website1>
        require all granted   ---因为在httpd-2.4里面默认对更改的主目录所有人是没有授权的,也就是不能访问,所以必须对这个目录进行授权才可以
</directory>
  • 基于IP的访问控制
    无明确授权的目录,默认拒绝
    允许所有主机访问:Require all granted
    拒绝所有主机访问:Require all denied
    控制特定的IP访问:
    Require ip IPADDR:授权指定来源的IP访问
    Require not ip IPADDR:拒绝特定的IP访问
    控制特定的主机访问:
    Require host HOSTNAME:授权特定主机访问
    Require not host HOSTNAME:拒绝
    HOSTNAME分为两类:
    FQDN:特定主机
    domin.tld:指定域名下的所有主机,也可以用域名
    允许所有的,但拒绝特定的
    <RequireAll>
    Require all granted
    Require not ip 172.16.1.1 拒绝特定IP
    </RequireAll>
    拒绝所有的,但允许特定的
    <RequireAny>
    Require all denied
    require ip 172.16.1.1允许特定IP
    </RequireAny
    示例
1、实现允许所有的主机访问,但拒绝172.18.21.106
vim /etc/httpd/conf.d/test.conf
<directory "/app/website1">
<requireall>
require all granted
require not ip 172.18.21.106
</requireall>
</directory>
2、实现拒绝所有的主机,但允许172.18.21.106主机访问
vim /etc/httpd/conf.d/test.conf
<directory "/app/website1">
<requireany>
require all denied
require  ip 172.18.21.106
</requireany>
</directory>
测试以上两种配置
curl -I 172.18.21.107  ---可以用这个命令进行测试是否允许访问
HTTP/1.1 403 Forbidden    ---403表示禁止访问,如果是200就表示允许访问
Date: Fri, 29 Sep 2017 08:31:52 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8

总结:curl -I 这个命令很常用,可以用来显示响应报文的头部信息,这个响应报文是从服务器响应给客户端的。

  • 虚拟主机
1、创建虚拟主机的三个主目录文件
mkdir /app/{a.com,b.com,c.com}
echo /app/a.com > /app/a.com/index.html
echo /app/b.com > /app/b.com/index.html
echo /app/c.com > /app/c.com/index.html
2、创建配置文件
vim /etc/httpd/conf.d/vhost.conf
<virtualhost *:80>
        servername www.a.com
        documentroot "/app/a.com"
        <directory "/app/a.com">
        require all granted
        </directory>
</virtualhost>
<virtualhost *:80>
        servername www.b.com
        documentroot "/app/b.com"
        <directory "/app/b.com">
        require all granted
        </directory>
</virtualhost>
<virtualhost *:80>
        servername www.c.com
        documentroot "/app/c.com"
        <directory "/app/c.com">
        require all granted
        </directory>
</virtualhost>
systemctl reload httpd
  • https和持久连接
    安装mod_ssl,实现https的配置和httpd-2.2操作相同
    支持毫秒级持久连接时长定义
    KeepAlive on
    KeepAliveTimeout
    MaxKeepAliveRequests 100
    用如下方法发送一个请求报文,可以判断默认的配置是否支持持久连接
[root@centos6 httpd]#telnet 172.18.21.107 80
Trying 172.18.21.107...
Connected to 172.18.21.107.
Escape character is '^]'.
GET / http/1.1     ---请求报文的开始行:方法、URL(/表示访问网站的根目录)、协议类型
host :www.a.com    ---请求报文的头部行,执行完这个操作后要按两次回车才能显示响应报文的头部信息及访问的内容

HTTP/1.1 200 OK
Date: Sat, 30 Sep 2017 11:27:59 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sat, 30 Sep 2017 11:07:57 GMT
ETag: "b-55a66275eb66c"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8

/app/a.com      ----显示访问的内容

GET / http/1.1      ---连接一次可以发送多个请求,说明默认就是持久连接的
host :www.b.com  

HTTP/1.1 200 OK
Date: Sat, 30 Sep 2017 11:28:34 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Sat, 30 Sep 2017 11:08:10 GMT
ETag: "b-55a66282ab513"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8

httpd-2.4 的主配置文件中没有上面说的持久连接的三行内容,但默认是持久连接的,可以把上面三行加到配置文件中调整持久连接的时间和最大请求次数。

  • sendfile机制
    不用sendfile 的传统网络传输过程是:比如客户端发送一个下载请求,服务器端在访问资源时,要到磁盘上去下载数据,这个过程是用户空间通过系统调用给内核发指令,内核到磁盘上去读数据,并将数据存储到内核的缓存空间,然后再将数据发送给用户空间,并存储到用户空间的缓存空间,用户空间封装http的头部,然后将数据写入用户的缓存空间,通过系统调用将数据发送给内核,缓存到内核的存储空间,然后将数据发送出去,这里用户缓存空间和内核的缓存空间都是内存空间,只不过各自有各自的内存空间,并且各自有各自的读的缓存空间和写的缓存空间。
    sendfie机制的作用是用户发送指令给内核空间后,内核直接从磁盘上读取数据并发送出去,这样可以有效的提升性能。
    如何开启
vim /etc/httpd/conf/httpd.conf
EnableSendfile on    ---默认这一项是开启的,就不用改了

4、httpd的反向代理功能

反向代理就是转发,也就是客户端去访问反向代理服务器,通过反向代理服务器转发调度功能去访问web服务器。


image.png

实现过程如下:

需要三台主机,a客户端,b是反向代理服务器,c是web服务器
1、在b上的操作:
vim /etc/httpd/conf.d/vhost.conf 
<virtualhost *:80>
        servername www.a.com
        documentroot "/app/a.com"
        <directory "/app/a.com">
        require all granted
        </directory>
proxypass "/" "http://172.18.21.106/"   
proxypassreverse "/" "http://172.18.21.106/"    ---表示客户端访问b的主目录就转发给c,c的地址是172.18.21.106,这里也可以在/后面加上目录的名字,表示访问主目录下的特定目录
</virtualhost>
2、在c上搭建一个web服务器,并且主页文件内容是alias / /root/text
3、在a上测试
curl www.a.com    a去访问b
alias / /root/text  ---发现显示的是c的内容,转发成功
同时在c上打开日志可以发现访问请求是来自b,而不是来自a
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容