计算机
类型
可以朗读
语音朗读
287千字
字数
2019-05-01
发行日期
展开全部
主编推荐语
详细剖析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,进而应用到自己的实际工作中,创造出更多的价值。
本书结构严谨、脉络清晰、论述精确、详略得当、图文并茂,值得广大软件开发工程师、系统运维工程师和编程爱好者拥有。
目录
- 封面
- 书名页
- 内容简介
- 版权页
- 前言
- 目录
- 第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 开发辅助工具
- 封底
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。