Apache源代码全景分析第1卷

当前位置:首页 > 计算机网络 > 网络与数据通信 > Apache源代码全景分析第1卷

出版社:电子工业出版社
出版日期:2009-5
ISBN:9787121084744
作者:张中庆,梁雪平
页数:636页

章节摘录

  第1章 Web服务器概述  1.3 Apache功能  1.3.1 虚拟主机  虚拟主机(Virtual Host)是指在一个机器上运行多个Web站点的机制 (比如:www.companyl.com和www.company2.com)。虚拟主机的实现包括以下三种方式。  (1)Web服务器中配备多个IP地址,并且每一个逻辑Web服务器使用一个IP地址。这种虚拟主机的实现技术被称为“基于IP”,这是最简单的虚拟主机的实现机制,但是这种机制存在一些问题,比如扩展性的问题。一台机器所能存在的物理IP地址总是有限的,因此对于一个专门的ISP而言,如果要提供大量的虚拟主机,则会存在相当大的困难。另外一个存在的问题就是IP地址的有限性,目前Web站点的数目远远超过IP地址的数目,因此,以IP地址区分虚拟主机,则会使Web站点的发展受到限制。  (2)Web服务器只有一个IP地址,不同的Web服务器使用不同的端口进行侦听。因此这种服务器的请求uRI中必须明确地给出端口,而不能使用默认的Web端口80,比如http://127.0.0.1:8900。这种虚拟主机的实现技术可称为“基于端口”。这种策略存在的问题是用户必须显式给出请求的端口,这对大部分用户来说显然是不太方便的。如果忘记输入端口号或输入一个错误的端口号,则会使用错误的虚拟主机。  (3)Web服务器只有一个IP地址,同时多个域名被映射到该IP地址上。所有的Web服务器侦听同一个端口。服务器通过HTTP请求头中的HOST域对请求进行区分。对于HTTP 1.1协议而言,该域是必须具备的,而低于HTTP 1.1的协议则未必如此。因此从这个意义上说,只有HTTP 1.1协议才可以支持这种基于“HOST域”的协议。  Apache中支持上面三个方式的虚拟主机,而且通过mod_vhost_alias模块,可以使得类似的虚拟主机配置起来非常容易,减轻了管理员的负担。

前言

  如果说没有Apache就没有Intemet可能有些夸张,但至少可以说没有Apache,互联网就不会发展得这么快。根据互联网研究公司NetCraft的统计,多年来Apache一直稳居Web服务器市场的头把交椅,至今仍占据超过50%的市场份额。就整个互联网来说,Apache仍然是最重要的软件之一。  尽管近几年来涌现出不少以“高性能”为卖点的新的Web服务器软件,比如Lighttpd、Nginx等,吸引了不少用户注意力,不过Apache因其功能广泛,某些方面仍具有不可替代性,仍然是Web服务器技术领域的风向标。话说回来,“重剑无锋,大巧不工”,有的时候软件性能表现不佳,更多原因可能是用户对其了解不够、使用不当造成的,并非软件自身有多大缺陷。对Apache来说,更是如此。因此,通过分析源代码了解Apache软件架构体系,熟知其本质,方能更有效地使用Apache Web服务器,使之发挥出最大效能。为网站节省资源,为企业节省资金,也能为用户提供更好的访问体验,好处多多。  此外,随着互联网业务的复杂化,很多网站在使用Apache的过程中也遇到了新的挑战,如常常要在业务的驱动下对Apache进行扩展性的开发(例如扩展日志模块以便于更复杂的日志统计)。这时,源代码分析是绕不过去的一件事儿,尽管源代码获取是轻而易举之事,但Apache代码毕竟凝聚了开源软件界的群体智慧,要想高效分析也并非易事,相信这本书能让有此需求的读者少走弯路,剥丝抽茧,获得更多启发与借鉴。  说起源代码分析,其实几年前市面上出现过一些有关此类话题的图书,但基本上是在大段源代码加上几句注释了事,读者可能会有吃到注水猪肉的感觉。而读者对本书这一点大可放心,书中代码只是点到即止,相对环保多了。

内容概要

张中庆,计算机软件与理论硕士。拥有多年服务器端软件开发经验,关注大规模服务器设计技术,致力于开源技术的使用、分享和推广,《UNIX/Linux下curses库开发指南》作者之一。
梁雪平,计算机应用硕士,深圳职业技术学院讲师,优秀教师。目前研究方向为数据库挖掘相关理论,致力于开源技术在高校的使用和推广。

书籍目录

第1章 WEB服务器概述
1
1.1 WWW概述
2
1.1.1 Internet概述
2
1.1.2 超文本的概念
3
1.1.3 WWW的历史
4
1.2 HTTP服务器
8
1.2.1 HTTP服务器简介
8
1.2.2 HTTP服务器功能
9
1.2.3 WWW文档
11
1.2.4 工作方式
12
1.3 APACHE功能
15
1.3.1 虚拟主机
16
1.3.2 内容协商
16
1.3.3 持续连接
17
1.3.4 缓存
18
1.3.5 访问控制和安全
20
1.3.6 动态内容生成
21
第2章 APACHE体系结构
23
2.1 APACHE目录
24
2.2 APACHE层次结构
26
2.2.1 操作系统支持层
27
2.2.2 可移植运行库层
27
2.2.3 核心功能层
28
2.2.4 可选功能层
29
2.2.5 第三方支持库
29
2.2.6 Apache工具包
30
2.3 APACHE核心功能层
30
2.3.1 核心与可选模块的关系
30
2.3.2 核心组件
30
2.4 APACHE运行流程
34
2.4.1 Apache启动过程
35
2.4.2 HTTP连接处理
36
2.4.3 请求报文读取
36
2.4.4 请求处理
37
2.4.5 内容生成
39
2.4.6 关闭与重启
40
2.5 主程序MAIN
41
2.5.1 主程序概要
41
2.5.2 主程序细节
42
第3章 配置文件管理
51
3.1 APACHE配置系统
52
3.2 配置文件
52
3.2.1 配置文件类
52
3.2.2 配置文件处理时机
54
3.3 指令相关概念
56
3.3.1 指令概述
56
3.3.2 指令参数
57
3.3.3 指令上下文
59
3.3.4 指令参数类型
73
3.4 指令配置
76
3.4.1 指令结构
76
3.4.2 指令定义
77
3.4.3 预定义指令函数
79
3.4.4 指令表
80
3.5 APACHE配置处理
81
3.5.1 指令保存
81
3.5.2 指令读取
83
3.5.3 配置指令处理
98
3.5.4 特殊指令
112
3.6 .HTACCESS处理
115
3.6.1 .htaccess使用场合
115
3.6.2 指令的覆盖
116
3.6.3 处理.htaccess
117
3.7 实现自己的配置段
120
第4章 APACHE模块化体系结构
123
4.1 APACHE模块概述
124
4.1.1 Apache模块组成
124
4.1.2 Apache核心与模块交互
125
4.2 APACHE模块结构
127
4.3 模块的加载
132
4.3.1 模块变量
132
4.3.2 DSO(Dynamic Shared Object,动态共享对象)的概念
134
4.3.3 静态模块加载
137
4.3.4 动态模块加载
141
4.3.5 模块卸载
146
4.4 指令表
147
4.4.1 指令表概述
147
4.4.2 指令处理函数
148
4.4.3 指令共享
151
4.5 挂钩(HOOK)
154
4.5.1 为什么引入挂钩
154
4.5.2 声明挂钩
158
4.5.3 挂钩数组声明(APR_HOOK_LINK)
162
4.5.4 挂钩结构(APR_HOOK_STRUCT)
162
4.5.5 挂钩函数注册(APR_IMPLEMENT_EXTERNAL_HOOK_BASE)
164
4.5.6 使用挂钩
165
4.5.7 挂钩排序
168
4.5.8 可选挂钩
179
4.5.9 挂钩纵览
184
4.5.10 自己编写挂钩
191
4.6 模块与配置文件
192
4.6.1 概述
192
4.6.2 如何描述配置信息
194
4.6.3 目录相关配置(Per-Directory Config)
195
4.6.4 服务器配置(Per-Server Config)
198
4.7 配置存储和使用
199
4.7.1 配置向量
199
4.7.2 配置存储体系结构
201
4.7.3 虚拟主机配置存储
202
4.7.4 目录配置存储
203
4.7.5 Location配置存储
205
4.7.6 文件配置存储
205
4.7.7 总体存储示意
206
4.8 模块通信
207
4.8.1 简单通信方式
208
4.8.2 可选函数
209
4.8.3 提供者API
212
4.9 常用模块
216
4.9.1 缓存模块
216
4.9.2 URL映射模块..
217
4.9.3 内容生成模块
219
4.9.4 安全模块
221
4.9.5 代理模块
223
4.9.6 其余模块
224
第5章 多任务并发处理
227
5.1 多进程并发处理
228
5.1.1 概述
228
5.1.2 MPM在Apache中的位置
229
5.2 MPM数据结构
231
5.2.1 记分板
231
5.2.2 终止管道(Pipe of Death)
244
5.3 INETD:通用的多任务处理结构
247
5.3.1 服务器程序概述
247
5.3.2 INETD
249
5.4 预创建(PREFORK)MPM分析
249
5.4.1 Leader/Follow模式
249
5.4.2 Prefork MPM概述
250
5.4.3 Prefork MPM实现
253
5.5 工作者(WORKER)MPM分析
291
5.5.1 Worker MPM概述
291
5.5.2 Worker主进程
294
5.5.3 子进程管理
305
5.5.4 线程管理
310
5.5.5 信号处理
323
5.6 WinNT MPM分析
326
5.6.1 WinNT MPM概述
326
5.6.2 完成端口相关概念
328
5.6.3 WinNT MPM主程序
330
5.6.4 监控主进程
332
5.6.5 工作进程
336
5.6.6 线程处理
345
第6章 网络连接
359
6.1 网络连接概述
360
6.1.1 网络连接上下文环境
360
6.1.2 等待连接
361
6.1.3 接受连接
361
6.1.4 创建连接
361
6.2 连接数据结构
361
6.3 等待连接
364
6.3.1 概述
364
6.3.2 套接字创建
365
6.3.3 套接字侦听
369
6.4 连接处理
376
6.4.1 连接处理概述
376
6.4.2 创建连接
377
6.4.3 连接处理
379
6.5 请求读取
385
6.5.1 请求读取概述
385
6.5.2 HTTP请求报文
386
6.5.3 request_rec结构
388
6.5.4 请求读取实现
395
6.5.5 请求行读取
402
6.5.6 请求头读取
404
6.5.7 网络IO读写
408
第7章 过滤器
409
7.1 过滤器概述
410
7.2 过滤器类型
412
7.3 过滤器结构
414
7.4 过滤器协议
416
7.5 过滤器使用
418
7.5.1 静态过滤器使用
418
7.5.2 动态过滤器使用
419
7.6 过滤器操作
419
7.6.1 过滤器注册概述
419
7.6.2 数据结构描述
420
7.6.3 过滤器结点
422
7.6.4 过滤器注册
424
7.6.5 过滤器的查找
428
7.6.6 添加过滤器至指定请求或连接
429
7.6.7 从连接中删除过滤器
436
7.6.8 过滤器初始化
437
7.7 智能过滤器
438
7.7.1 何谓智能过滤器
438
7.7.2 智能过滤器的使用
442
7.7.3 智能过滤器的实现
442
7.8 过滤器函数
457
7.8.1 输出过滤器
457
7.8.2 输入过滤器
457
第8章 存储段和存储段组
459
8.1 什么是存储段和存储段组
460
8.1.1 存储段和存储段组
460
8.1.2 为什么需要存储段组
463
8.2 存储段分配子
465
8.2.1 概述
465
8.2.2 分配子创建
466
8.2.3 存储段内存分配
467
8.2.4 存储段内存释放
471
8.3 存储段操作概述
471
8.3.1 存储段接口
471
8.3.2 存储段空接口
476
8.4 存储段类型
482
8.4.1 堆存储段(Heap Bucket)
483
8.4.2 内存池存储段(Pool Bucket)
487
8.4.3 文件存储段(File Bucket)
490
8.4.4 MMAP存储段(MMAP Bucket)
494
8.4.5 套接字存储段(Socket Bucket)
497
8.4.6 管道存储段(Pipe Bucket)
499
8.4.7 持久存储段(Immortal Bucket)
500
8.4.8 临时存储段(Transient Bucket)
502
8.4.9 刷新存储段(Flush Bucket)
503
8.4.10 流终止(EOS)存储段
505
8.4.11 HTTP错误存储段
507
8.5 存储段操作
508
8.6 存储段组操作
511
8.6.1 创建存储段组
512
8.6.2 存储段组的销毁
512
8.6.3 存储段组的分裂
513
8.6.4 统计存储段长度
517
8.6.5 存储段转换
518
8.6.6 数据写入
520
8.6.7 ap_r*函数写入
526
8.7 存储段组和过滤器
528
8.7.1 存储段组和过滤器的关系
528
8.7.2 获取存储段组
528
8.7.3 存储段组传递
529
第9章 常用过滤器
531
9.1 概述
532
9.2 输入过滤器
532
9.2.1 CORE_IN输入过滤器
534
9.2.2 HTTP_IN过滤器
545
9.2.3 创建自己的输入过滤器
556
9.3 输出过滤器
558
9.3.1 资源过滤器
559
9.3.2 内容过滤器
563
9.3.3 协议过滤器
564
9.3.4 编码转换过滤器
580
9.3.5 网络过滤器(CORE)
583
9.3.6 编写输出过滤器
591
索引
603

作者简介

本书是“Apache源代码全景分析”的第1卷。书中详细讲解了Apache的基础体系结构和核心模块的实现机制,包括配置文件、模块化结构、多任务并发,以及网络连接和请求读取,其中多任务并发体系结构是本书分析的重点,讨论了Prefork、Worker及WinNT3种MPM。本书还重点介绍了Apache 2.0新引入的过滤器,包括过滤器的使用、实现,以及其中的数据组织形式——存储段和存储段组,剖析了Apache中常用的过滤器。本书深入挖掘分析Apache运行背后的实现机制和模块开发的细节,适合Apache模块开发者、希望了解内部细节的Apache管理员、Web服务器开发者、大规模服务器开发者学习和阅读。

图书封面


 Apache源代码全景分析第1卷下载 更多精彩书评



发布书评

 
 


精彩书评 (总计6条)

  •     翻译有些地方感觉欠妥,有很多和apache手册上的E文原意虽说差别不大,但是还是感觉文字会造成一定的理解障碍。感觉书中很多内容是对手册的直译,唯一多出的内容是代码的分析。但毕竟是作者这么多年积累的心血,希望作者能坚持下去,持续润色改进。
  •     以前买过一本Apache源代码分析的书,机械工业出版社,90%的代码,10%的所谓的注释,而且价格奇贵无比,竟然要95块钱,买了以后大呼后悔,看了几页,就一直搁在柜子里懒得去翻。对我来说几乎没有价值。自此之后对于这类的Apache源代码分析的书甚有恐惧感。这次去书店,冲着博文的名声,去翻了翻,不过翻了几页,觉得本书挺厚道,起码不像机工的那本垃圾书,都是源代码。书中代码量倒不是很多,估计是跟《Linux源代码情景分析》学习的写作风格。回来看了最关心的MPM模块,刚看了Perfork MPM。不过好像没有看到Event MPM,不知道是有意疏忽还是?? Event MPM由于采用了最新的Epoll,应该会更吸引人,如果加上,更好了。希望下次能看到。以前没有太多太深的研究过Apache代码,此次买书也主要是收藏,以备需要的时候翻阅。不过相信对于真正需要的人来说,这书还是非常值得推荐的。
  •     书中错误太多,用词前后不一致,前面“记分板”后面就成了“公告板”。书中的代码随意的加粗,有些地方好像是为了强调,有些地方者不知什么原因就加粗了。此外书中不少地方用了Petri网,但是没有任何关于图中符号意义的说明。

精彩短评 (总计12条)

  •     这个倒没怎么认真看,不过应该跟nginx的源码大同小异,基本上主要模块就是http和events处理
  •     读了几天,整个apache的架构比较多,但感觉到不足的是,第三卷好像没出来,
    书中有些是要参考第三卷的。
    书中的有些代码细节还是少了些,比如有些技巧性代码应该介绍下为什么这么写,
    等。总体不错。。。
  •     买错了,想要了解apache配置的同学还是不要买这本书了,个人建议
  •     书比较厚,还可以。性价比较高
  •     怎么说呢,代码分析这种书,只适合做参考书看,当分析代码分析不下去的时候去查查,毕竟,看别人分析过的代码就好像吃别人吃过的东西一样,收获不会多。所以建议是自己先看代码,看到不懂的地方再查查书比较合适了。。
  •     为了写书而写,平铺直叙,没有点自己的理解与思想。层次提得不高。
  •     老实说,有些东西感觉还是没讲清楚
  •     刚开始看,感觉还行
  •     倒数第二块砖
  •     乱
  •     作者写作功底还不够,开始很多直接翻译的apache文档,与其说翻译,不如说是直译,读起来不太舒服。中间很多地方用词不准确,希望作者能有所改进吧。 修正:不是写作功底不够,是根本不合格,里面的语病多到令人发指的程度。当然,也有可能是我读的版本有问题。
  •     思路清晰 比较详细
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024