首页>参考读物>计算机科学与技术>计算机网络

Nginx底层设计与源码分析
作者 : 聂松松 赵禹 施洪宝 等著 扉页:聂松松 赵禹 施洪宝 景罗 黄桃 李乐 张报 闫昌 田峰 著
丛书名 : Web开发技术丛书
出版日期 : 2021-05-31
ISBN : 978-7-111-68274-5
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 356
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书内容上分为三篇,共计13章内容。
第1篇(第1~5章)基础知识篇,第1章主要讲解了Nginx源码目录介绍的作用及编译与安装,第2章讲解了Nginx的整体架构与设计思路的实现,第3~5章主要讲解了Nginx的基本数据结构、内存管理与配置文件解析等实现。
第2篇(第6~11章)核心模块篇,这一篇为本书的核心内容,其中第6章讲解了Nginx生命周期的实现,第7章讲解了Event模块及其用到的事件模型实现,第8章讲解了HTTP模块及11阶段的实现,第9章讲解了Upstream模块实现,第10章讲解了FastCGI与proxy模块实现,第11章讲解了负载均衡、限流、SSL、log等模块实现。
第3篇(第12~13章)实战应用篇,讲解了Nginx的rtmp模块实现,让读者对跨平台原理实现、多进程管理、信号、信号量、共享内存、事件等知识点有一个更深入的理解。

图书特色

好未来资深专家撰写,剖析Nginx源码设计精髓与应用
大量源码分析与流程图总结,详解Nginx架构、执行流程、模块实现与数据结构,兼有经百万级PV直播高峰验证的Nginx直播服务案例

图书前言

在写这本书之前,笔者们专门对源码学习和交流了很长一段时间。因为一个人去坚持自己的目标真的很难,但是一群人去学习,相互鼓励,相互督促,会让学习更高效且更有动力。
当然,学习是为了获取知识、总结学习结果,以便在未来更好地工作。在总结的过程中,大家逐渐有了把这些经验分享出来的想法,以帮助更多想要了解Nginx的人,于是便有了本书。
本书特色
内容丰富:除了Nginx相关的进程、数据结构、配置、HTTP模块、内存等内容,还附带编译脚手架和RTMP模块的详细讲解。通过学习这些内容,读者可以了解模块的构成,开发定制模块。
深入浅出:Nginx源码设计中涉及很多知识,这对入门读者来说有一定的难度。所以本书结合案例分析,让读者更轻松地理解这些庞杂、有难度的知识。
实战讲解:通过关键代码片段以及原理分析进行实战难点讲解。某些代码分析还带有源码调试分析与处理流程图,便于读者动手实战,快速入门。
本书结构
本书共12章,主要内容介绍如下。
第1章介绍Nginx源码与编译安装,第2章介绍Nginx基础架构与设计理念,这两章从Nginx的优势、源码结构、进程模型等几个方面概述Nginx。
第3章介绍Nginx的内存管理,从内存池、共享内存两方面介绍Nginx内存管理的相关内容。
第4章介绍Nginx的基本数据结构,包括字符串、数组、链表、队列、散列、红黑树、基数树的数据结构和算法。
第5章解析Nginx的配置文件,通过对main配置块、events配置块与http配置块的详细介绍,概述Nginx配置解析的全过程。
第6章介绍Nginx进程机制,通过进程模式、Master进程、Worker进程以及进程间通信机制,完整介绍Nginx进程的管理。
第7章介绍HTTP模块,通过服务初始化、请求解析、HTTP请求处理以及HTTP请求响应,详细介绍HTTP模块的处理过程。
第8章介绍Upstream机制,对Upstream初始化、上下游连接建立、长连接、FastCGI模块做了详细介绍。
第9章介绍Event模块实现,内容涉及Nginx事件模型的文件事件、时间事件、进程池、连接池等事件处理流程。
第10章介绍Nginx的负载均衡、限流、日志等模块的实现。
第11章介绍跨平台实现,对Nginx的configure编译文件、跨平台原子操作和锁进行详细介绍。
第12章介绍基于Nginx的RTMP直播服务实现。
预备知识
读者在学习本书之前可以对以下知识进行初步了解,以便更好地学习与理解本书。
C/C++基础:首先要掌握C/C++语言基础,这样有助于理解源码语意、语法以及相关的业务逻辑。
GDB调试:本书中的一些代码片段是采用GDB进行调试的,因此了解GDB调试工具有助于对Nginx的进程进行调试。
Nginx基础使用:本书基于Nginx 1.160版本编写,如果你对Nginx的一些使用已经了解,学习起来会更容易。
HTTP及其网络编程基础知识。
勘误与交流
由于笔者写作水平和写作时间有限,文中难免有疏漏与笔误,欢迎大家通过电子邮件等方式批评指正。
笔者邮箱:9641354@qq.com。
笔者博客:https://segmentfault.com/u/php7internal。
致谢
感谢学而思网校技术负责人陈雷老师在本书写作过程中给予的帮助和支持。
感谢出版社给了笔者一次和大家分享技术、交流学习的机会,感谢高婧雅编辑在本书出版过程中的辛勤付出。

赵 禹
2021年4月12日

上架指导

计算机\Web设计

封底文字

韩天峰
好未来学而思网校首席架构师
不同于市面上常见的Nginx应用书籍,本书从Nginx底层的多进程模型、异步非阻塞I/O、数据结构与内存管理、通信协议与机制等角度分析了Nginx的底层原理和设计思路,揭示了Nginx高并发、高性能的本质,值得一读。

陈雷
好未来学而思网校技术负责人 
本书详细地介绍了Nginx的原理和实现,从基础数据结构,到HTTP请求,再到反馈的整个流程,非常详细。对Nginx初学者与对Nginx有兴趣的读者来说,这本书都非常值得读。

通过阅读本书,你将:
  了解Nginx的基础数据结构与算法;
  了解Nginx的RTMP在直播服务中的实现;
  了解Nginx跨平台编译的源码实现原理;
  了解Nginx的内存管理与进程机制的源码实现;
  了解Nginx的事件模型与配置的源码实现;
  了解Nginx的HTTP模块与FastCGI模块的实现机制。

推荐序

过去最主流的服务器是1995年发布的Apache 1.0。Apache 源于NCSA HTTPd服务器,是一个多进程模型的Web服务器。但运行到后期,Apache渐渐出现很多问题,比如内存占用很大、扩展需挂接第三方库、并发能力受限等。2004年10月,新的Web服务器 Nginx 1.0横空出世。该服务器采用“多进程+I/O复用+扩展静态编译到主进程”的并发模型,被一直沿用至今。
Nginx经过十余年的发展,已经演变成非常成熟的Web服务器、代理接入服务器。目前,Nginx在全球Web服务器市场中的份额约为38%,超过了Apache服务器全球25%的市场份额,为全球各类Web/API服务器提供接入服务,满足用户的各种访问需求。
Nginx弥补了过去大部分服务端软件依赖于操作系统提供的类似于libc/glibc等基础库的不足,其内部的主流数据结构算法全部自主实现,包括进程管理、内存管理、异步网络I/O封装、各种均衡策略、网络代理、HTTP处理等,还具备强大的扩展挂接机制,已经成为高性能服务器开发的典范。
目前,市面上关于Nginx内核实现机制和原理的书籍并不是很多。本书由Nginx技术专家撰写。他们把对Nginx的使用、研究体会以及对源码的理解编撰成书,带领读者深入理解高性能服务器Nginx的内部实现机制。
本书内容由浅入深,除了介绍Nginx的数据结构、网络模型、配置解析、进程机制、HTTP处理、负载均衡等基础实现机制,还介绍Nginx在基于RTMP方面的直播模块的实现,非常适合高性能服务器爱好者学习。
纸上得来终觉浅,绝知此事要躬行。愿所有阅读本书的技术伙伴先读书后实践,知行合一,真正掌握Nginx的精髓,成为优秀的技术人。

谢华亮(CSDN博客技术专家,学而思网校技术委员会主席)
2021年5月7日

图书目录

推荐序
前 言
第1章 Nginx源码与编译安装 1
1.1 Nginx优势与4种应用示例 1
1.2 Nginx源码结构 4
1.3 Nginx编译安装 5
1.4 本章小结 6
第2章 Nginx基础架构与设计理念 7
2.1 Nginx进程模型 7
2.2 Nginx模块化设计 9
2.2.1 模块分类 9
2.2.2 模块接口 10
2.2.3 模块分工 12
2.3 Nginx事件驱动 13
2.4 本章小结 14
第3章 Nginx内存管理 15
3.1 Nginx内存管理简介 15
3.2 Nginx内存池 16
3.2.1 内存池结构 16
3.2.2 申请内存 17
3.2.3 释放内存 20
3.3 Nginx共享内存 22
3.3.1 共享内存的创建及销毁 22
3.3.2 互斥锁 23
3.3.3 共享内存管理 25
3.3.4 共享内存使用 30
3.4 本章小结 31
第4章 基本数据结构 32
4.1 字符串 32
4.2 数组 33
4.3 链表 35
4.4 队列 37
4.5 散列 42
4.6 红黑树 46
4.7 基数树 56
4.8 本章小结 59
第5章 配置文件解析 60
5.1 配置文件简介 60
5.2 主函数ngx_conf_parse 63
5.3 解析main配置 65
5.3.1 创建main配置上下文 65
5.3.2 解析配置指令 66
5.4 解析events配置块 69
5.5 解析http配置块 71
5.5.1 main配置解析 71
5.5.2 server配置解析 74
5.5.3 location配置解析 76
5.5.4 配置合并 79
5.5.5 location配置再处理 81
5.5.6 upstream配置解析 83
5.6 本章小结 85
第6章 Nginx进程机制 86
6.1 Nginx进程模式 86
6.1.1 daemon模式 86
6.1.2 单进程模式和多进程模式 88
6.1.3 进程模式源码解析 88
6.2 Master进程 91
6.3 Worker进程 93
6.4 进程间通信机制 99
6.4.1 信号定义 99
6.4.2 信号注册 101
6.4.3 信号处理 102
6.4.4 Master进程处理机制 106
6.4.5 Worker进程处理机制 110
6.4.6 Master进程与Worker进程通信 111
6.5 本章小结 115
第7章 HTTP模块 116
7.1 整体流程 117
7.1.1 HTTP模块初始化 117
7.1.2 HTTP请求解析 118
7.1.3 HTTP请求处理与响应 120
7.2 HTTP服务初始化 123
7.2.1 模块初始化 123
7.2.2 事件初始化 126
7.2.3 HTTP会话建立 128
7.3 HTTP请求解析 130
7.3.1 基础结构体 131
7.3.2 接收请求流程 135
7.3.3 解析请求行 137
7.3.4 解析请求头 143
7.4 HTTP请求处理 148
7.4.1 多阶段划分 148
7.4.2 11个阶段初始化 153
7.4.3 处理HTTP请求 155
7.4.4 处理请求体 169
7.5 HTTP请求响应 177
7.5.1 过滤模块 177
7.5.2 发送HTTP响应 182
7.5.3 结束HTTP响应 190
7.6 本章小结 197
第8章 Upstream机制 198
8.1 Upstream简介 198
8.2 初始化Upstream 200
8.3 与上游建立连接 205
8.4 发送请求到上游 208
8.5 处理上游响应头 210
8.6 处理上游响应体 213
8.7 结束请求 217
8.8 重试机制 219
8.9 长连接 220
8.10 FastCGI模块 225
8.10.1 FastCGI协议简介 225
8.10.2 FastCGI通信流程 226
8.10.3 Nginx FastCGI 227
8.11 本章小结 228
第9章 Event模块实现 229
9.1 基础知识及相关配置项介绍 230
9.1.1 基本概念 230
9.1.2 基本网络模型 230
9.1.3 epoll网络模型 231
9.1.4 Event模块相关配置项介绍 234
9.2 Nginx事件模型 234
9.2.1 文件事件 235
9.2.2 时间事件 235
9.2.3 进程池 237
9.2.4 监听池 237
9.2.5 连接池 238
9.2.6 事件池 240
9.2.7 Event模块初始化过程 244
9.2.8 请求处理流程 257
9.3 Nginx的惊群处理 262
9.4 Nginx的陈旧事件处理 264
9.5 本章小结 266
第10章 其他模块 267
10.1 负载均衡模块 267
10.1.1  Nginx负载均衡算法简介 267
10.1.2 Nginx负载均衡配置指令 268
10.1.3 Nginx负载均衡算法实现 270
10.2 限流模块 276
10.2.1 常见限流算法 276
10.2.2 Nginx限流配置 277
10.2.3 限流实现原理 278
10.3 日志模块 287
10.3.1 日志模块配置指令 288
10.3.2 日志模块实现原理 290
10.4 本章小结 295
第11章 跨平台实现 296
11.1 configure实现详解 296
11.2 跨平台的原子操作和锁 304
11.3 信号量 311
11.4 信号和进程管理 315
11.5 共享内存 322
11.6 本章小结 325
第12章 基于Nginx的RTMP直播服务实现 326
12.1 Nginx-RTMP简介 326
12.2 握手 328
12.3 分块 331
12.4 Nginx-RTMP模块 335
12.5 中继模块 342
12.6 本章小结 347

教学资源推荐
作者: (希)Grigoris Antoniou (荷)Paul Groth (荷)Frank van Harmelen(荷)Rinke Hoekstra      著
作者: (美)Behrouz A. Forouzan; Firouz Mosharraf 著
作者: 吴功宜 吴英 等编著
作者: 吴功宜 吴英 编著
参考读物推荐
作者: (美)Steve Maxwell
作者: [美]亚历克斯·马特罗索夫(Alex Matrosov) [美]尤金·罗季奥诺夫(Eugene Rodionov)[美]谢尔盖·布拉图斯(Sergey Bratus)著
作者: 黄凯 毛伟杰 顾骏杰 著