Nginx 模块开发指南使用 C++11 和 Boost 程序库
Nginx 是由俄罗斯工程师 Igor Sysoev 开发的一个高性能 Web 服务器,运行效率远超传统的 Apache、Tomcat,是世界第二大 Web 服务器,被国内外诸多顶级互联网公司采用。
Nginx 的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自 2004 年发布至今,已经拥有百余个官方及非官方的功能模块(如 fastcgi、memcached、mysql 等),使得 Nginx 成长为了一个近乎全能的服务器软件。
Nginx 以纯 C 语言实现,开发扩展功能模块也大多使用 C 语言,但由于 C 语言固有的过程式特性,编写、调试代码都较麻烦——特别是对于 Nginx 的初学者。
目录
第 0 章 导读
0.1 关于本书
0.2 读者对象
0.3 读者要求
0.4 运行环境
0.5 本书的结构
0.6 如何阅读本书
0.7 本书的源码
第 1 章 Nginx 入门
1.1 关于 Nginx
1.1.1 历史
1.1.2 特点
1.1.3 进程模型
1.1.4 版本
1.2 安装 Nginx
1.2.1 准备工作
1.2.2 快速安装
1.2.3 运行命令
1.2.4 验证安装
1.2.5 定制安装
1.3 配置 Nginx
1.3.1 配置文件格式
1.3.2 进程配置
1.3.3 运行日志配置
1.3.4 http 配置
1.3.5 server 配置
1.3.6 location 配置
1.3.7 文件访问配置
1.3.8 upstream 配置
1.3.9 变量
1.4 总结
第 2 章 Nginx 开发准备
2.1 开发环境
2.1.1 C++标准
2.1.2 Boost 程序库
2.2 Nginx 的目录结构
2.3 Nginx 源码的特点
2.3.1 代码风格
2.3.2 代码优化
2.3.3 面向对象思想
2.4 在 Nginx 里使用 C++
2.4.1 实现原则
2.4.2 代码风格
2.4.3 编译脚本
2.5 基本的 C++包装类
2.5.1 类定义
2.5.2 构造和析构
2.5.3 成员函数
2.6 总结
第 3 章 Nginx 基础设施
3.1 头文件
3.2 整数类型
3.2.1 标准整数类型
3.2.2 自定义整数类型
3.2.3 无效值
3.2.4 C++封装
3.3 错误处理
3.3.1 错误码定义
3.3.2 C++异常
3.4 内存池
3.4.1 结构定义
3.4.2 操作函数
3.4.3 C++封装
3.4.4 清理机制
3.4.5 C++内存分配器
3.5 字符串
3.5.1 结构定义
3.5.2 操作函数
3.5.3 C++封装
3.6 时间与日期
3.6.1 时间结构定义
3.6.2 时间操作函数
3.6.3 日期结构定义
3.6.4 日期操作函数
3.6.5 C++封装时间
3.6.6 C++封装日期
3.7 运行日志
3.7.1 结构定义
3.7.2 操作函数
3.7.3 C++封装
3.8 总结
第 4 章 Nginx 高级数据结构
4.1 动态数组
4.1.1 结构定义
4.1.2 操作函数
4.1.3 C++封装
4.2 单向链表
4.2.1 结构定义
4.2.2 操作函数
4.2.3 C++迭代器
4.2.4 C++封装链表
4.3 双端队列
4.3.1 结构定义
4.3.2 操作函数
4.3.3 C++节点
4.3.4 C++迭代器
4.3.5 C++封装队列
4.4 缓冲区
4.4.1 结构定义
4.4.2 操作函数
4.4.3 C++封装
4.5 数据块链
4.5.1 结构定义
4.5.2 操作函数
4.5.3 C++节点
4.5.4 C++迭代器
4.5.5 C++封装数据块链
4.6 键值对
4.6.1 简单键值对
4.6.2 散列表键值对
4.7 总结
第 5 章 Nginx 开发综述
5.1 最简单的 Nginx 模块
5.1.1 模块设计
5.1.2 配置解析
5.1.3 处理函数
5.1.4 模块集成
5.1.5 编译脚本和命令
5.1.6 测试验证
5.2 Nginx 开发基本流程
5.2.1 设计
5.2.2 开发
5.2.3 编译
5.2.4 测试验证
5.2.5 调优
5.3 Nginx 的模块
5.3.1 模块的数据结构
5.3.2 模块的种类
5.3.3 http 模块
5.3.4 模块的类图
5.3.5 模块的组织形式
5.4 Nginx 的配置
5.4.1 结构定义
5.4.2 配置解析的基本流程
5.4.3 配置数据的存储模型
5.4.4 访问配置数据
5.4.5 确定配置数据的位置
5.4.6 配置解析函数
5.4.7 配置数据的合并
5.4.8 配置指令的类型
5.5 Nginx 模块源码分析
5.5.1 ngx_core_module
5.5.2 ngx_errlog_module
5.6 Nginx 的编译脚本
5.6.1 运行机制
5.6.2 使用的变量
5.7 C++封装模块信息
5.7.1 NgxModuleConfig
5.7.2 NgxModule
5.8 C++封装配置解析
5.8.1 NgxCommand
5.8.2 NgxTake
5.8.3 NGX_MODULE_NULL
5.9 C++开发 Nginx 模块
5.9.1 C++模块的基本组成
5.9.2 配置信息类
5.9.3 业务逻辑类
5.9.4 模块集成类
5.9.5 实现源文件
5.9.6 增加更多功能
5.10 总结
第 6 章 Nginx HTTP 框架综述
6.1 HTTP 框架简介
6.1.1 模块分类
6.1.2 处理流程
6.1.3 请求结构体
6.1.4 请求的处理阶段
6.1.5 请求的环境数据
6.2 HTTP 处理引擎
6.2.1 处理函数原型
6.2.2 处理函数的存储方式
6.2.3 内容处理函数
6.2.4 引擎的数据结构
6.2.5 引擎的初始化
6.2.6 引擎的运行机制
6.2.7 日志阶段的处理
6.3 HTTP 过滤引擎
6.3.1 过滤函数原型
6.3.2 过滤函数链表
6.3.3 过滤函数的顺序
6.3.4 过滤链表的运行机制
6.3.5 请求体过滤
6.4 Nginx 模块源码分析
6.4.1 ngx_http_static_module
6.4.2 ngx_http_not_modified_filter_ module
6.5 C++封装
6.5.1 NgxModuleCtx
6.5.2 NgxHttpCoreModule
6.5.3 NgxFilter
6.6 总结
第 7 章 Nginx HTTP 请求处理
7.1 HTTP 状态码
7.2 请求结构体
7.3 请求行
7.3.1 请求方法
7.3.2 协议版本号
7.3.3 资源标识符
7.4 请求头
7.5 请求体
7.5.1 结构定义
7.5.2 操作函数
7.6 响应头
7.6.1 结构定义
7.6.2 操作函数
7.7 响应体
7.8 C++封装
7.8.1 NgxHeaders
7.8.2 NgxRequestBody
7.8.3 NgxRequest
7.8.4 NgxResponse
7.9 开发 HTTP 处理模块
7.9.1 模块设计
7.9.2 配置信息类
7.9.3 业务逻辑类
7.9.4 模块集成类
7.9.5 实现源文件
7.9.6 编译脚本
7.9.7 测试验证
7.10 开发 HTTP 过滤模块
7.10.1 模块设计
7.10.2 配置信息类
7.10.3 环境数据类
7.10.4 业务逻辑类
7.10.5 模块集成类
7.10.6 实现源文件
7.10.7 编译脚本
7.10.8 测试验证
7.11 总结
第 8 章 Nginx HTTP 请求转发
8.1 upstream 框架简介
8.1.1 工作原理
8.1.2 请求结构体
8.1.3 上游结构体
8.1.4 上游配置参数
8.2 upstream 运行机制
8.2.1 回调函数
8.2.2 初始化 upstream
8.2.3 设置 upstream
8.2.4 启动 upstream
8.2.5 处理 upstream 数据
8.3 load-balance 运行机制
8.3.1 结构定义
8.3.2 初始化模块入口
8.3.3 初始化 IP 地址列表
8.3.4 初始化算法
8.3.5 执行算法
8.4 Nginx 模块源码分析
8.4.1 ngx_http_memcached_module
8.4.2 ngx_http_upstream_ip_hash_ module
8.5 C++封装
8.5.1 NgxUpstream
8.5.2 NgxUpstreamHelper
8.5.3 NgxHttpUpstreamModule
8.5.4 NgxLoadBalance
8.6 开发 upstream 模块
8.6.1 模块设计
8.6.2 配置信息类
8.6.3 业务逻辑类
8.6.4 模块集成类
8.6.5 实现源文件
8.6.6 编译脚本
8.6.7 测试验证
8.7 开发 load-balance 模块
8.7.1 模块设计
8.7.2 配置信息类
8.7.3 业务逻辑类
8.7.4 模块集成类
8.7.5 实现源文件
8.7.6 编译脚本
8.7.7 测试验证
8.8 总结
第 9 章 Nginx HTTP 子请求
9.1 子请求简介
9.1.1 工作原理
9.1.2 请求结构体
9.1.3 回调函数
9.1.4 待处理请求链表
9.1.5 子请求存储结构
9.2 子请求运行机制
9.2.1 创建子请求
9.2.2 处理引擎
9.2.3 数据整理
9.3 C++封装
9.3.1 NgxSubRequestHandler
9.3.2 NgxSubRequest
9.4 数据回传模块
9.4.1 模块设计
9.4.2 环境数据类
9.4.3 业务逻辑类
9.4.4 模块集成类
9.4.5 编译脚本
9.5 在模块里使用子请求
9.5.1 模块设计
9.5.2 配置信息类
9.5.3 业务逻辑类
9.5.4 测试验证
9.6 总结
第 10 章 Nginx 变量
10.1 结构定义
10.1.1 变量值
10.1.2 变量访问对象
10.1.3 变量的存储
10.1.4 请求结构体
10.2 运行机制
10.2.1 注册变量
10.2.2 获取变量
10.3 C++封装
10.3.1 NgxVariableValue
10.3.2 NgxVariable
10.3.3 NgxVariables
10.3.4 NgxVarManager
10.3.5 NgxVariableValueProxy
10.4 在模块里使用变量
10.4.1 添加变量
10.4.2 读写变量
10.5 总结
第 11 章 Nginx 辅助设施
11.1 摘要算法
11.1.1 MD5
11.1.2 SHA-1
11.1.3 MurmurHash
11.1.4 C++封装
11.2 编码和解码
11.2.1 CRC 校验
11.2.2 Base64 编码解码
11.2.3 URI 编码解码
11.2.4 HTML 和 JSON 编码
11.3 正则表达式
11.4 共享内存
11.4.1 结构定义
11.4.2 操作函数
11.4.3 C++共享内存
11.5 定时器
11.5.1 结构定义
11.5.2 操作函数
11.5.3 C++定时器事件
11.5.4 C++定时器工厂
11.6 总结
第 12 章 Nginx 与设计模式
12.1 设计模式简介
12.2 框架级别的模式
12.3 业务级别的模式
12.4 代码级别的模式
12.5 总结
第 13 章 结束语
13.1 本书的遗憾
13.2 下一步
13.3 临别赠言
附录 A 推荐书目
附录 B GDB 调试简介
附录 C Nginx 的字符串格式化
附录 D Nginx 里的 void*变量
附录 E Nginx C++模块简介
附录 F Nginx Lua 模块简介
封底
下载地址:https://www.wenjiangs.com/wp-content/uploads/2023/10/9F6MVMvfDxPDxZOL.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论