类似推荐
编辑推荐
详细剖析Nginx核心运行机制。
内容简介
Nginx是著名的Web服务器,性能优异,运行效率远超传统的Apache、Tomcat,广泛应用于国内外诸多尖端互联网公司。
Nginx的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004年发布至今,已经拥有百余个官方及非官方的功能模块(如proxy、mysql、redis、rtmp、lua等),使得Nginx成长为了一个近乎“全能”的服务器软件。
Nginx功能强大,架构复杂,学习、维护和开发的门槛较高。为了帮助读者跨越这一障碍,本书深入新版Nginx源码(Stable1.12.0),详细剖析了模块体系、动态插件、功能框架、进程模型、事件驱动、线程池、TCP/UDP/HTTP处理等Nginx核心运行机制,在此基础上讲解如何使用C、C++、Lua、nginScript等语言来增强扩展Nginx,让任何人都能够便捷、轻松地开发和定制Nginx,进而应用到自己的实际工作中,创造出更多的价值。
本书结构严谨、脉络清晰、论述精确、详略得当、图文并茂,值得广大软件开发工程师、系统运维工程师和编程爱好者拥有。
作者简介
作者罗剑锋,在1996年就读于东北财经大学;1997年开始接触C/C++;1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质;2003年毕业于北京理工大学,获计算机专业硕士学位。主要研究方向为C/C++、设计模式、高性能网络服务器开发,业余爱好是阅读、旅游、欣赏音乐和电影。
章节目录
封面
书名页
内容简介
版权页
前言
目录
第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 运行日志
1.3.5 事件机制
1.4 HTTP服务
1.4.1 基本配置
1.4.2 schmerver配置
1.4.3 location配置
1.4.4 file配置
1.5 TCP/UDP服务
1.6 反向代理
1.6.1 上游集群
1.6.2 负载均衡
1.6.3 代理转发
1.7 变量
1.8 总结
第2章 Nginx开发准备
2.1 源码结构
2.2 源码特点
2.2.1 代码风格
2.2.2 代码优化
2.2.3 面向对象思想
2.3 头文件
2.4 总结
第3章 Nginx基础设施
3.1 常数
3.1.1 环境信息
3.1.2 版本信息
3.1.3 错误码
3.2 整数类型
3.2.1 标准整数类型
3.2.2 自用整数类型
3.2.3 无效值
3.3 内存池
3.3.1 结构定义
3.3.2 操作函数
3.3.3 用法示例
3.4 字符串
3.4.1 结构定义
3.4.2 操作函数
3.4.3 用法示例
3.5 时间
3.5.1 结构定义
3.5.2 操作函数
3.5.3 用法示例
3.6 日期
3.6.1 结构定义
3.6.2 操作函数
3.6.3 用法示例
3.7 运行日志
3.7.1 结构定义
3.7.2 操作函数
3.7.3 用法示例
3.8 摘要算法
3.8.1 Times33
3.8.2 CRC
3.8.3 MurmurHash
3.8.4 MD5
3.8.5 SHA-1
3.9 数据编码
3.9.1 Base64
3.9.2 HTML/JSON
3.10 总结
第4章 Nginx高级数据结构
4.1 动态数组
4.1.1 结构定义
4.1.2 操作函数
4.1.3 用法示例
4.2 单向链表
4.2.1 结构定义
4.2.2 操作函数
4.2.3 用法示例
4.3 双端队列
4.3.1 结构定义
4.3.2 操作函数
4.3.3 用法示例
4.4 红黑树
4.4.1 结构定义
4.4.2 操作函数
4.4.3 用法示例
4.5 缓冲区
4.5.1 结构定义
4.5.2 操作函数
4.5.3 用法示例
4.6 数据块链
4.6.1 结构定义
4.6.2 操作函数
4.6.3 用法示例
4.7 总结
第5章 Nginx开发概述
5.1 开发示例
5.1.1 模块设计
5.1.2 配置解析
5.1.3 处理函数
5.1.4 模块集成
5.1.5 编译脚本
5.1.6 测试验证
5.2 开发流程
5.2.1 设计
5.2.2 开发
5.2.3 编译
5.2.4 测试验证
5.2.5 调优
5.2.6 流程图
5.3 编译脚本
5.3.1 运行机制
5.3.2 脚本变量
5.3.3 添加模块
5.3.4 脚本格式
5.3.5 旧式脚本
5.4 总结
第6章 Nginx模块体系
6.1 模块架构
6.1.1 结构定义
6.1.2 模块的签名
6.1.3 模块的种类
6.1.4 模块的函数指针表
6.1.5 模块的类图
6.1.6 模块的组织形式
6.1.7 模块的静态加载
6.1.8 模块的动态加载
6.2 配置解析
6.2.1 结构定义
6.2.2 基本流程
6.2.3 存储模型
6.2.4 访问配置数据
6.2.5 配置数据的位置
6.2.6 配置数据的解析
6.2.7 配置数据的合并
6.2.8 配置指令的类型
6.3 源码分析
6.3.1 ngx_core_module
6.3.2 ngx_errlog_module
6.4 总结
第7章 Nginx功能框架
7.1 框架简介
7.1.1 模块分类
7.1.2 处理流程
7.1.3 请求的处理阶段
7.1.4 请求结构体
7.1.5 请求的环境数据
7.2 处理引擎
7.2.1 函数原型
7.2.2 处理函数的存储方式
7.2.3 内容处理函数
7.2.4 引擎的数据结构
7.2.5 引擎的初始化
7.2.6 引擎的运行机制
7.2.7 日志阶段的处理
7.3 过滤引擎
7.3.1 函数原型
7.3.2 过滤函数链表
7.3.3 过滤函数的顺序
7.3.4 过滤链表的运行机制
7.3.5 请求体过滤
7.4 源码分析
7.4.1 ngx_http_static_module
7.4.2 ngx_http_not_modified_filter_module
7.5 总结
第8章 Nginx请求处理
8.1 状态码
8.2 请求结构体
8.3 请求行
8.3.1 请求方法
8.3.2 协议版本号
8.3.3 资源标识符
8.4 请求头
8.5 请求体
8.5.1 结构定义
8.5.2 操作函数
8.6 响应头
8.6.1 结构定义
8.6.2 操作函数
8.7 响应体
8.8 源码分析
8.8.1 ngx_http_static_module
8.8.2 ngx_http_not_modified_filter_module
8.9 开发示例:content handler
8.9.1 模块设计
8.9.2 配置数据
8.9.3 处理函数
8.9.4 注册函数
8.9.5 模块集成
8.9.6 编译脚本
8.9.7 测试验证
8.10 开发示例:filter
8.10.1 模块设计
8.10.2 配置数据
8.10.3 环境数据
8.10.4 注册过滤函数
8.10.5 过滤响应头
8.10.6 过滤响应体
8.10.7 模块集成
8.10.8 编译脚本
8.10.9 测试验证
8.11 总结
第9章 Nginx请求转发
9.1 框架简介
9.1.1 工作原理
9.1.2 请求结构体
9.1.3 上游结构体
9.1.4 上游配置参数
9.2 请求转发
9.2.1 回调函数
9.2.2 初始化
9.2.3 设置参数
9.2.4 启动连接
9.2.5 处理响应头
9.2.6 处理响应体
9.3 负载均衡
9.3.1 结构定义
9.3.2 初始化模块入口
9.3.3 初始化地址列表
9.3.4 初始化算法
9.3.5 执行算法
9.4 源码分析
9.4.1 ngx_http_memcached_module
9.4.2 ngx_http_upstream_ip_hash_module
9.5 开发示例:upstream
9.5.1 模块设计
9.5.2 配置数据
9.5.3 上行数据
9.5.4 下行数据
9.5.5 启动转发
9.5.6 注册函数
9.5.7 模块集成
9.5.8 编译脚本
9.5.9 测试验证
9.6 开发示例:balance
9.6.1 模块设计
9.6.2 配置数据
9.6.3 算法数据结构
9.6.4 模块入口
9.6.5 算法实现
9.6.6 模块集成
9.6.7 编译脚本
9.6.8 测试验证
9.7 总结
第10章 Nginx子请求
10.1 框架简介
10.1.1 工作原理
10.1.2 请求结构体
10.1.3 回调函数
10.1.4 待处理请求链表
10.1.5 子请求存储结构
10.2 运行机制
10.2.1 创建子请求
10.2.2 处理引擎
10.2.3 数据整理
10.3 开发示例
10.3.1 模块设计
10.3.2 配置数据
10.3.3 环境数据
10.3.4 回调函数
10.3.5 处理函数
10.3.6 注册函数
10.3.7 测试验证
10.4 总结
第11章 Nginx变量
11.1 结构定义
11.1.1 变量
11.1.2 复杂变量
11.1.3 变量的存储
11.1.4 请求结构体
11.2 操作变量
11.2.1 添加变量
11.2.2 获取变量
11.2.3 修改变量
11.2.4 编译复杂变量
11.2.5 获取复杂变量
11.3 开发示例:变量
11.3.1 模块设计
11.3.2 定义变量
11.3.3 添加变量
11.3.4 获取变量
11.3.5 测试验证
11.4 开发示例:复杂变量
11.4.1 模块设计
11.4.2 定义复杂变量
11.4.3 编译复杂变量
11.4.4 获取复杂变量
11.4.5 测试验证
11.5 总结
第12章 Nginx内存管理机制
12.1 基本系统调用
12.1.1 malloc
12.1.2 posix_memalign
12.1.3 free
12.2 块式内存池
12.2.1 结构定义
12.2.2 常量定义
12.2.3 创建内存池
12.2.4 分配内存
12.2.5 分配大块内存
12.2.6 分配小块内存
12.2.7 释放内存
12.2.8 清理机制
12.2.9 清空内存池
12.2.10 销毁内存池
12.3 页式内存池
12.3.1 结构定义
12.3.2 常量定义
12.3.3 初始化内存池
12.3.4 分配内存
12.3.5 分配大块内存
12.3.6 分配小块内存
12.3.7 释放内存
12.4 总结
第13章 Nginx进程机制
13.1 基本系统调用
13.1.1 errno
13.1.2 getrlimit
13.2 进程系统调用
13.2.1 getpid
13.2.2 fork
13.2.3 waitpid
13.3 信号系统调用
13.3.1 kill
13.3.2 sigaction
13.3.3 sigsuspend
13.4 结构定义
13.4.1 ngx_cycle_t
13.4.2 ngx_core_conf_t
13.4.3 ngx_process_t
13.5 全局变量
13.5.1 命令行相关
13.5.2 操作系统相关
13.5.3 进程功能相关
13.5.4 信号功能相关
13.6 启动过程
13.6.1 基本流程
13.6.2 解析命令行
13.6.3 版本和帮助信息
13.6.4 初始化cycle
13.6.5 测试配置
13.6.6 发送信号
13.6.7 守护进程化
13.6.8 启动工作进程
13.6.9 流程图
13.7 信号处理
13.7.1 信号处理函数
13.7.2 发送信号
13.7.3 处理信号
13.8 单进程模式
13.8.1 single进程
13.8.2 single进程流程图
13.9 多进程模式
13.9.1 产生子进程
13.9.2 master进程
13.9.3 master进程流程图
13.9.4 worker进程
13.9.5 worker进程流程图
13.10 总结
第14章 Nginx进程间通信机制
14.1 基本系统调用
14.1.1 atomic
14.1.2 sched_yield
14.1.3 semaphore
14.1.4 mmap
14.2 共享内存(Ⅰ)
14.2.1 结构定义
14.2.2 创建共享内存
14.2.3 使用共享内存
14.3 自旋锁
14.3.1 自旋锁定
14.3.2 解除锁定
14.3.3 使用自旋锁
14.4 互斥锁
14.4.1 结构定义
14.4.2 创建互斥锁
14.4.3 互斥锁定
14.4.4 解除锁定
14.4.5 销毁互斥锁
14.4.6 使用互斥锁
14.5 读写锁
14.5.1 写锁定
14.5.2 读锁定
14.5.3 解除锁定
14.5.4 降级锁定
14.5.5 使用读写锁
14.6 共享内存(Ⅱ)
14.6.1 结构定义
14.6.2 添加共享内存
14.6.3 创建共享内存
14.6.4 使用共享内存
14.7 总结
第15章 Nginx事件机制
15.1 基本系统调用
15.1.1 errno
15.1.2 ioctl
15.1.3 setitimer
15.1.4 gettimeofday
15.2 socket系统调用
15.2.1 socket
15.2.2 bind
15.2.3 listen
15.2.4 accept
15.2.5 connect
15.2.6 recv
15.2.7 send
15.2.8 setsockopt
15.2.9 close
15.2.10 函数关系图
15.3 epoll系统调用
15.3.1 epoll_create
15.3.2 epoll_ctl
15.3.3 epoll_wait
15.3.4 LT和ET
15.3.5 函数关系图
15.4 结构定义
15.4.1 ngx_event_t
15.4.2 ngx_connection_t
15.4.3 ngx_listening_t
15.4.4 ngx_cycle_t
15.4.5 ngx_os_io_t
15.4.6 ngx_event_actions_t
15.4.7 ngx_posted_events
15.4.8 关系图
15.5 定时器
15.5.1 红黑树
15.5.2 操作函数
15.5.3 超时处理
15.6 模块体系
15.6.1 函数指针表
15.6.2 模块的组织形式
15.6.3 核心配置
15.6.4 epoll模块
15.7 全局变量
15.7.1 更新时间相关
15.7.2 事件机制相关
15.7.3 负载均衡相关
15.7.4 统计相关
15.8 进程初始化
15.8.1 初始化函数
15.8.2 基本参数初始化
15.8.3 事件机制初始化
15.8.4 连接池初始化
15.8.5 监听端口初始化
15.8.6 初始化流程图
15.9 运行机制
15.9.1 添加事件
15.9.2 删除事件
15.9.3 处理事件
15.9.4 接受连接
15.9.5 负载均衡
15.10 避免阻塞
15.11 总结
第16章 Nginx多线程机制
16.1 eventfd系统调用
16.2 pthread系统调用
16.3 结构定义
16.3.1 ngx_thread_task_t
16.3.2 ngx_thread_pool_queue_t
16.3.3 ngx_thread_pool_t
16.3.4 结构关系图
16.4 事件通知
16.4.1 函数接口
16.4.2 初始化
16.4.3 发送通知
16.4.4 处理通知
16.5 运行机制
16.5.1 完成任务队列
16.5.2 创建线程池
16.5.3 创建任务
16.5.4 投递任务
16.5.5 执行任务
16.5.6 任务完成回调
16.5.7 销毁线程池
16.6 开发示例
16.6.1 模块设计
16.6.2 配置数据
16.6.3 线程任务
16.6.4 任务完成回调
16.6.5 投递任务
16.6.6 测试验证
16.7 总结
第17章 Nginx Stream机制
17.1 模块体系
17.1.1 函数指针表
17.1.2 基础模块
17.1.3 核心模块
17.1.4 结构关系图
17.1.5 存储模型
17.2 监听端口
17.2.1 结构定义
17.2.2 解析配置
17.2.3 启动监听
17.3 处理引擎
17.3.1 阶段定义
17.3.2 函数原型
17.3.3 处理函数的存储方式
17.3.4 引擎数据结构
17.3.5 结构关系图
17.3.6 引擎的初始化
17.4 过滤引擎
17.4.1 函数原型
17.4.2 过滤函数链表
17.5 运行机制
17.5.1 会话结构体
17.5.2 创建会话
17.5.3 执行引擎
17.5.4 通用阶段处理
17.5.5 预读数据
17.5.6 产生响应数据
17.5.7 过滤数据
17.5.8 结束会话
17.6 开发示例
17.6.1 discard协议
17.6.2 time协议
17.6.3 echo协议
17.7 总结
第18章 Nginx HTTP机制
18.1 结构定义
18.1.1 ngx_http_state_e
18.1.2 ngx_http_connection_t
18.1.3 ngx_http_request_t
18.2 初始化连接
18.2.1 建立连接
18.2.2 等待数据
18.2.3 读取请求头
18.3 执行引擎
18.3.1 初始化引擎
18.3.2 通用阶段
18.3.3 改写阶段
18.3.4 访问控制阶段
18.3.5 内容产生阶段
18.4 处理请求体
18.4.1 丢弃缓冲区数据
18.4.2 读取并丢弃数据
18.4.3 读事件处理函数
18.4.4 启动丢弃处理
18.5 发送数据
18.5.1 发送初始化
18.5.2 事件处理函数
18.6 结束请求
18.6.1 释放请求资源
18.6.2 检查引用计数结束请求
18.6.3 检查状态结束请求
18.6.4 综合处理结束请求
18.7 总结
第19章 Nginx与设计模式
19.1 设计模式简介
19.2 框架级别的模式
19.3 业务级别的模式
19.4 代码级别的模式
19.5 总结
第20章 Nginx C++开发
20.1 语言简介
20.2 开发准备
20.2.1 程序库
20.2.2 头文件
20.2.3 编程范式
20.2.4 实现原则
20.2.5 源码组织
20.2.6 编译脚本
20.3 封装类
20.3.1 基础设施
20.3.2 高级数据结构
20.3.3 功能框架
20.3.4 请求处理
20.4 开发示例:content handler
20.4.1 配置信息类
20.4.2 业务逻辑类
20.4.3 模块集成类
20.4.4 实现源文件
20.5 开发示例:filter
20.5.1 配置信息类
20.5.2 环境数据类
20.5.3 业务逻辑类
20.5.4 模块集成类
20.5.5 实现源文件
20.6 总结
第21章 Nginx JavaScript开发
21.1 语言简介
21.2 模块简介
21.3 开发准备
21.4 指令简介
21.5 功能接口
21.5.1 运行日志
21.5.2 变量
21.5.3 请求处理
21.5.4 子请求
21.5.5 定时器
21.5.6 流处理
21.6 开发示例
21.6.1 content handler
21.6.2 subrequest
21.6.3 A/B testing
21.7 总结
第22章 Nginx Lua开发
22.1 语言简介
22.2 模块简介
22.2.1 http_lua
22.2.2 stream_lua
22.2.3 lua-resty-lib
22.3 开发准备
22.4 指令简介
22.4.1 配置指令
22.4.2 功能指令
22.4.3 指令关系图
22.5 应用开发流程
22.6 功能接口
22.6.1 运行日志
22.6.2 时间与日期
22.6.3 变量
22.6.4 正则表达式
22.6.5 请求处理
22.6.6 请求转发
22.6.7 子请求
22.6.8 定时器
22.6.9 共享内存
22.7 开发示例
22.7.1 content handler
22.7.2 filter
22.7.3 upstream
22.7.4 subrequest
22.7.5 discard
22.7.6 echo
22.8 总结
第23章 Nginx调试与测试
23.1 调试
23.1.1 调试器
23.1.2 调试断点
23.1.3 调试日志
23.2 功能测试
23.2.1 测试套件
23.2.2 测试用例
23.2.3 运行测试
23.3 性能测试
23.3.1 ab
23.3.2 http_load
23.3.3 wrk
23.3.4 Test::Nginx
23.4 总结
第24章 Nginx性能分析
24.1 简介
24.2 火焰图
24.3 分析工具
24.3.1 使用方式
24.3.2 处理数据
24.4 动态追踪
24.4.1 CPU分析
24.4.2 I/O分析
24.4.3 Memory分析
24.4.4 观测工具
24.5 总结
第25章 结束语
25.1 本书的遗憾
25.2 下一步
25.3 临别赠言
附录A 推荐书目
附录B 字符串格式化
附录C 开发辅助工具
封底
Nginx完全开发指南是2019年由电子工业出版社出版,作者罗剑锋。
得书感谢您对《Nginx完全开发指南》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。