深入理解Nginx:模块开发与架构解析
读书笔记
第一部分
Nginx能帮我们做什么
第1章 研究Nginx前的准备工作
1.1Nginx是什么
1.2为什么选择Nginx
1.3准备工作
1.4编译安装Nginx
1.5configure详解
1.6Nginx的命令行控制
1.7小结
第2章 Nginx的配置
2.1运行中的Nginx进程间的关系
2.2Nginx配置的通用语法
2.3Nginx服务的基本配置
2.4用HTTP核心模块配置一个静态Web服务器
2.5用HTTP proxy module配置一个反向代理服务器
2.6小结
第二部分 如何编写HTTP模块
第3章 开发一个简单的HTTP模块
3.1如何调用HTTP模块
3.2准备工作
3.3如何将自己的HTTP模块编译进Nginx
3.4HTTP模块的数据结构
3.5定义自己的HTTP模块
3.6处理用户请求
3.7发送响应
3.8将磁盘文件作为包体发送
3.9用C++语言编写HTTP模块
3.10小结
第4章 配置、error日志和请求上下文
4.1http配置项的使用场景
4.2怎样使用http配置
4.3HTTP配置模型
4.4error日志的用法
4.5请求的上下文
4.6小结
第5章 访问第三方服务
5.1upstream的使用方式
5.2回调方法的执行场景
5.3使用upstream的示例
5.4subrequest的使用方式
5.5subrequest执行过程中的主要场景
5.6subrequest使用的例子
5.7小结
第6章 开发一个简单的HTTP过滤模块
6.1过滤模块的意义
6.2过滤模块的调用顺序
6.3HTTP过滤模块的开发步骤
6.4HTTP过滤模块的简单例子
6.5小结
第7章 Nginx提供的高级数据结构
7.1Nginx提供的高级数据结构概述
7.2ngx_queue_t双向链表
7.3ngx_array_t动态数组
7.4ngx_list_t单向链表
7.5ngx_rbtree_t红黑树
7.6ngx_radix_tree_t基数树
7.7支持通配符的散列表
7.8小结
第三部分 深入Nginx
第8章 Nginx基础架构
8.1Web服务器设计中的关键约束
8.2Nginx的架构设计
8.3Nginx框架中的核心结构体ngx_cycle_t
8.4Nginx启动时框架的处理流程
8.5worker进程是如何工作的
8.6master进程是如何工作的
8.7ngx_pool_t内存池
8.8小结
第9章 事件模块
9.1事件处理框架概述
9.2Nginx事件的定义
9.3Nginx连接的定义
9.4ngx_events_module核心模块
9.5ngx_event_core_module事件模块
9.6epoll事件驱动模块
9.7定时器事件
9.8事件驱动框架的处理流程
9.9文件的异步I/O
9.10TCP协议与Nginx
9.11小结
第10章 HTTP框架的初始化
10.1HTTP框架概述
10.2管理HTTP模块的配置项
10.3监听端口的管理
10.4server的快速检索
10.5location的快速检索
10.6HTTP请求的11个处理阶段
10.7HTTP框架的初始化流程
10.8小结
第11章 HTTP框架的执行流程
11.1HTTP框架执行流程概述
11.2新连接建立时的行为
11.3第一次可读事件的处理
11.4接收HTTP请求行
11.5接收HTTP头部
11.6处理HTTP请求
11.7subrequest与post请求
11.8处理HTTP包体
11.9发送HTTP响应
11.10结束HTTP请求
11.11小结
第12章 upstream机制的设计与实现
12.1upstream机制概述
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.4Nginx频道
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.3slab内存管理的实现原理
16.4小结