深入理解 Nginx 模块开发与架构解析 第一版和第二版 PDF 文档
人们在了解新事物时,往往习惯通过类比来帮助自己理解事物的概貌。那么,我们在学习 Nginx 时也采用同样的方式,先来看看 Nginx 的竞争对手——Apache、Lighttpd、Tomcat、Jetty、IIS,它们都是 Web 服务器,或者叫做 WWW(World Wide Web)服务器,相应地也都具备 Web 服务器的基本功能:基于 REST 架构风格 [1] ,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟通依据,通过 HTTP 为浏览器等客户端程序提供各种网络服务。然而,由于这些 Web 服务器在设计阶段就受到许多局限,例如当时的互联网用户规模、网络带宽、产品特点等局限,并且各自的定位与发展方向都不尽相同,使得每一款 Web 服务器的特点与应用场合都很鲜明。
Tomcat 和 Jetty 面向 Java 语言,先天就是重量级的 Web 服务器,它的性能与 Nginx 没有可比性,这里略过。
IIS 只能在 Windows 操作系统上运行。Windows 作为服务器在稳定性与其他一些性能上都不如类 UNIX 操作系统,因此,在需要高性能 Web 服务器的场合下,IIS 可能会被冷落。
前言
第一部分 Nginx 能帮我们做什么
第 1 章 研究 Nginx 前的准备工作
1.1 Nginx 是什么
1.2 为什么选择 Nginx
1.3 准备工作
1.4 编译安装 Nginx
1.5 configure 详解
1.6 Nginx 的命令行控制
1.7 小结
第 2 章 Nginx 的配置
2.1 运行中的 Nginx 进程间的关系
2.2 Nginx 配置的通用语法
2.3 Nginx 服务的基本配置
2.4 用 HTTP 核心模块配置一个静态 Web 服务器
2.5 用 HTTP proxy module 配置一个反向代理服务器
2.6 小结
第二部分 如何编写 HTTP 模块
第 3 章 开发一个简单的 HTTP 模块
3.1 如何调用 HTTP 模块
3.2 准备工作
3.3 如何将自己的 HTTP 模块编译进 Nginx
3.4 HTTP 模块的数据结构
3.5 定义自己的 HTTP 模块
3.6 处理用户请求
3.7 发送响应
3.8 将磁盘文件作为包体发送
3.9 用 C++语言编写 HTTP 模块
3.10 小结
第 4 章 配置、error 日志和请求上下文
4.1 http 配置项的使用场景
4.2 怎样使用 http 配置
4.3 HTTP 配置模型
4.4 error 日志的用法
4.5 请求的上下文
4.6 小结
第 5 章 访问第三方服务
5.1 upstream 的使用方式
5.2 回调方法的执行场景
5.3 使用 upstream 的示例
5.4 subrequest 的使用方式
5.5 subrequest 执行过程中的主要场景
5.6 subrequest 使用的例子
5.7 小结
第 6 章 开发一个简单的 HTTP 过滤模块
6.1 过滤模块的意义
6.2 过滤模块的调用顺序
6.3 HTTP 过滤模块的开发步骤
6.4 HTTP 过滤模块的简单例子
6.5 小结
第 7 章 Nginx 提供的高级数据结构
7.1 Nginx 提供的高级数据结构概述
7.2 ngx_queue_t 双向链表
7.3 ngx_array_t 动态数组
7.4 ngx_list_t 单向链表
7.5 ngx_rbtree_t 红黑树
7.6 ngx_radix_tree_t 基数树
7.7 支持通配符的散列表
7.8 小结
第三部分 深入 Nginx
第 8 章 Nginx 基础架构
8.1 Web 服务器设计中的关键约束
8.2 Nginx 的架构设计
8.3 Nginx 框架中的核心结构体 ngx_cycle_t
8.4 Nginx 启动时框架的处理流程
8.5 worker 进程是如何工作的
8.6 master 进程是如何工作的
8.7 ngx_pool_t 内存池
8.8 小结
第 9 章 事件模块
9.1 事件处理框架概述
9.2 Nginx 事件的定义
9.3 Nginx 连接的定义
9.4 ngx_events_module 核心模块
9.5 ngx_event_core_module 事件模块
9.6 epoll 事件驱动模块
9.7 定时器事件
9.8 事件驱动框架的处理流程
9.9 文件的异步 I/O
9.10 TCP 协议与 Nginx
9.11 小结
第 10 章 HTTP 框架的初始化
10.1 HTTP 框架概述
10.2 管理 HTTP 模块的配置项
10.3 监听端口的管理
10.4 server 的快速检索
10.5 location 的快速检索
10.6 HTTP 请求的 11 个处理阶段
10.7 HTTP 框架的初始化流程
10.8 小结
第 11 章 HTTP 框架的执行流程
11.1 HTTP 框架执行流程概述
11.2 新连接建立时的行为
11.3 第一次可读事件的处理
11.4 接收 HTTP 请求行
11.5 接收 HTTP 头部
11.6 处理 HTTP 请求
11.7 subrequest 与 post 请求
11.8 处理 HTTP 包体
11.9 发送 HTTP 响应
11.10 结束 HTTP 请求
11.11 小结
第 12 章 upstream 机制的设计与实现
12.1 upstream 机制概述
12.2 启动 upstream
12.3 与上游服务器建立连接
12.4 发送请求到上游服务器
12.5 接收上游服务器的响应头部
12.6 不转发响应时的处理流程
12.7 以下游网速优先来转发响应
12.8 以上游网速优先来转发响应
12.9 结束 upstream 请求
12.10 小结
第 13 章 邮件代理模块
13.1 邮件代理服务器的功能
13.2 邮件模块的处理框架
13.3 初始化请求
13.4 接收并解析客户端请求
13.5 邮件认证
13.6 与上游邮件服务器间的认证交互
13.7 透传上游邮件服务器与客户端间的流
13.8 小结
第 14 章 进程间的通信机制
14.1 概述
14.2 共享内存
14.3 原子操作
14.4 Nginx 频道
14.5 信号
14.6 信号量
14.7 文件锁
14.8 互斥锁
14.9 小结
第 15 章 变量
15.1 使用内部变量开发模块
15.2 内部变量工作原理
15.3 定义内部变量
15.4 外部变量与脚本引擎
15.5 小结
第 16 章 slab 共享内存
16.1 操作 slab 共享内存的方法
16.2 使用 slab 共享内存池的例子
16.3 slab 内存管理的实现原理
16.4 小结
下载地址:https://www.wenjiangs.com/wp-content/uploads/2023/11/gtDPLOb1dZz3PtTw.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论