万本电子书0元读

万本电子书0元读

顶部广告

Nginx完全开发指南:使用C、C++和OpenResty电子书

资深技术专家Nginx 源码研习书强势升级! 深新版Nginx 源码(Stable 1.12.0)! 详细剖析Nginx 核心运行机制! 便捷、轻松地发和定制Nginx!

售       价:¥

纸质售价:¥74.20购买纸书

325人正在读 | 4人评论 6.4

作       者:罗剑锋

出  版  社:电子工业出版社

出版时间:2017-05-01

字       数:27.5万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(4条)
  • 读书简介
  • 目录
  • 累计评论(4条)
Nginx 是著名的Web 服务器,性能优异,运行效率远超传统的Apache、Tomcat,广泛应用于国内外诸多*互联网公司。Nginx 的一个突出特是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004 年发布至今,已经拥有百余个官方及非官方的功能模块(如proxy、mysql、redis、rtmp、lua等),使得Nginx 成长为了一个近乎“全能”的服务器软件。Nginx 功能强大,架构复杂,学习、维护和发的门槛较高。为了帮助读者跨越这一障碍,本书深*的Nginx 源码(Stable 1.12.0),详细剖析了模块体系、动态插件、功能框架、程模型、事件驱动、线程池、TCP/UDP/HTTP 处理等Nginx 核心运行机制,在此基础上讲解如何使用C、C 、Lua、nginScript 等语言来增强扩展Nginx,让任何人都能够便捷、轻松地发和定制Nginx,而应用到自己的实际工作中,创造出更多的价值。本书结构严谨、脉络清晰、论述精确、详略得当、图文并茂,值得广大软件发工程师、系统运维工程师和编程爱好者拥有。<br/>【推荐语】<br/>资深技术专家Nginx 源码研习书强势升级! 深新版Nginx 源码(Stable 1.12.0)! 详细剖析Nginx 核心运行机制! 便捷、轻松地发和定制Nginx!<br/>【作者】<br/>罗剑锋(网名Chrono)1996年就读于东北财经大学;1997年始触C/C ;1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质;2003年毕业于北京理工大学,获计算机专业硕士学位。主要研究方向为C/C 、设计模式、高性能网络服务器发,业余爱好是阅读、欣赏音乐和旅游。<br/>
目录展开

前言

第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 events配置

1.3.6 http配置

1.3.7 server配置

1.3.8 location配置

1.3.9 file配置

1.3.10 upstream配置

1.3.11 变量

1.4 总结

第2章 Nginx开发准备

2.1 开发环境

2.1.1 C++标准

2.1.2 Boost程序库

2.2 目录结构

2.3 源码特点

2.3.1 代码风格

2.3.2 代码优化

2.3.3 面向对象思想

2.4 使用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.1.1 Nginx头文件

3.1.2 C++头文件

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 操作函数

4.4.4 C++红黑树

4.5 缓冲区

4.5.1 结构定义

4.5.2 操作函数

4.5.3 C++缓冲区

4.6 数据块链

4.6.1 结构定义

4.6.2 操作函数

4.6.3 C++节点

4.6.4 C++迭代器

4.6.5 C++数据块链

4.7 键值对

4.7.1 简单键值对

4.7.2 散列表键值对

4.8 总结

第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 C++封装

6.4.1 NgxModuleConfig

6.4.2 NgxModule

6.4.3 NgxTake

6.4.4 NGX_MODULE_NULL

6.5 C++开发模块

6.5.1 模块的基本组成

6.5.2 配置信息类

6.5.3 业务逻辑类

6.5.4 模块集成类

6.5.5 实现源文件

6.5.6 增加更多功能

6.6 总结

第7章 Nginx HTTP框架综述

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 C++封装

7.5.1 NgxModuleCtx

7.5.2 NgxHttpCoreModule

7.5.3 NgxFilter

7.6 总结

第8章 Nginx HTTP请求处理

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 C++封装

8.9.1 NgxHeaders

8.9.2 NgxRequestBody

8.9.3 NgxRequest

8.9.4 NgxResponse

8.10 开发handler模块

8.10.1 模块设计

8.10.2 配置信息类

8.10.3 业务逻辑类

8.10.4 模块集成类

8.10.5 实现源文件

8.10.6 编译脚本

8.10.7 测试验证

8.11 开发filter模块

8.11.1 模块设计

8.11.2 配置信息类

8.11.3 环境数据类

8.11.4 业务逻辑类

8.11.5 模块集成类

8.11.6 实现源文件

8.11.7 编译脚本

8.11.8 测试验证

8.12 总结

第9章 Nginx HTTP请求转发

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.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 C++封装

9.5.1 NgxUpstream

9.5.2 NgxUpstreamHelper

9.5.3 NgxHttpUpstreamModule

9.5.4 NgxLoadBalance

9.6 开发upstream模块

9.6.1 模块设计

9.6.2 配置信息类

9.6.3 业务逻辑类

9.6.4 模块集成类

9.6.5 实现源文件

9.6.6 编译脚本

9.6.7 测试验证

9.7 开发load-balance模块

9.7.1 模块设计

9.7.2 配置信息类

9.7.3 业务逻辑类

9.7.4 模块集成类

9.7.5 实现源文件

9.7.6 编译脚本

9.7.7 测试验证

9.8 总结

第10章 Nginx HTTP子请求

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 C++封装

10.3.1 NgxSubRequestHandler

10.3.2 NgxSubRequest

10.4 数据回传模块

10.4.1 模块设计

10.4.2 环境数据类

10.4.3 业务逻辑类

10.4.4 模块集成类

10.4.5 编译脚本

10.5 在模块里使用子请求

10.5.1 模块设计

10.5.2 配置信息类

10.5.3 业务逻辑类

10.5.4 测试验证

10.6 总结

第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.3 复杂变量

11.3.1 结构定义

11.3.2 运行机制

11.4 C++封装

11.4.1 NgxVariableValue

11.4.2 NgxVariable

11.4.3 NgxVarManager

11.4.4 NgxVariables

11.4.5 NgxComplexValue

11.5 在模块里使用变量

11.5.1 添加变量

11.5.2 读写变量

11.6 在模块里使用复杂变量

11.6.1 配置信息类

11.6.2 业务逻辑类

11.6.3 模块集成类

11.6.4 测试验证

11.7 总结

第12章 Nginx辅助设施

12.1 摘要算法

12.1.1 MD5

12.1.2 SHA-1

12.1.3 MurmurHash

12.1.4 C++封装

12.2 编码和解码

12.2.1 CRC校验

12.2.2 Base64编码解码

12.2.3 URI编码解码

12.2.4 HTML和JSON编码

12.3 正则表达式

12.4 共享内存

12.4.1 结构定义

12.4.2 操作函数

12.4.3 C++共享内存

12.5 总结

第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 errno

14.1.2 ioctl

14.1.3 setitimer

14.1.4 gettimeofday

14.2 socket系统调用

14.2.1 socket

14.2.2 bind

14.2.3 listen

14.2.4 accept

14.2.5 connect

14.2.6 recv

14.2.7 send

14.2.8 setsockopt

14.2.9 close

14.2.10 函数关系图

14.3 epoll系统调用

14.3.1 epoll_create

14.3.2 epoll_ctl

14.3.3 epoll_wait

14.3.4 LT和ET

14.3.5 函数关系图

14.4 结构定义

14.4.1 ngx_event_t

14.4.2 ngx_connection_t

14.4.3 ngx_listening_t

14.4.4 ngx_cycle_t

14.4.5 ngx_os_io_t

14.4.6 ngx_event_actions_t

14.4.7 ngx_posted_events

14.4.8 结构关系图

14.5 定时器

14.5.1 红黑树

14.5.2 操作函数

14.5.3 超时处理

14.6 模块体系

14.6.1 函数指针表

14.6.2 模块的组织形式

14.6.3 核心配置

14.6.4 epoll模块

14.7 全局变量

14.7.1 更新时间相关

14.7.2 事件机制相关

14.7.3 负载均衡相关

14.7.4 统计相关

14.8 运行机制

14.8.1 模块初始化

14.8.2 进程初始化

14.8.3 基本参数初始化

14.8.4 epoll初始化

14.8.5 连接池初始化

14.8.6 监听端口初始化

14.8.7 初始化流程图

14.8.8 添加事件

14.8.9 删除事件

14.8.10 处理事件

14.8.11 接受连接

14.8.12 负载均衡

14.8.13 避免阻塞

14.9 总结

第15章 Nginx多线程机制

15.1 eventfd系统调用

15.2 pthread系统调用

15.2.1 pthread_create

15.2.2 pthread_exit

15.3 结构定义

15.3.1 ngx_thread_task_t

15.3.2 ngx_thread_pool_queue_t

15.3.3 ngx_thread_pool_t

15.3.4 结构关系图

15.4 事件通知

15.4.1 函数接口

15.4.2 初始化

15.4.3 发送通知

15.4.4 处理通知

15.5 运行机制

15.5.1 完成任务队列

15.5.2 创建线程池

15.5.3 创建任务

15.5.4 投递任务

15.5.5 执行任务

15.5.6 任务完成回调

15.5.7 销毁线程池

15.6 在模块里使用多线程

15.6.1 模块设计

15.6.2 配置信息类

15.6.3 业务逻辑类

15.6.4 测试验证

15.7 总结

第16章 Nginx Stream机制

16.1 模块体系

16.1.1 函数指针表

16.1.2 基础模块

16.1.3 核心模块

16.1.4 结构关系图

16.1.5 存储模型

16.2 监听端口

16.2.1 结构定义

16.2.2 解析配置

16.2.3 启动监听

16.3 处理引擎

16.3.1 阶段定义

16.3.2 函数原型

16.3.3 处理函数的存储方式

16.3.4 引擎数据结构

16.3.5 结构关系图

16.3.6 引擎的初始化

16.4 过滤引擎

16.4.1 函数原型

16.4.2 过滤函数链表

16.5 运行机制

16.5.1 会话结构体

16.5.2 创建会话

16.5.3 执行引擎

16.5.4 通用阶段处理

16.5.5 预读数据

16.5.6 产生响应数据

16.5.7 过滤数据

16.5.8 结束会话

16.6 开发stream模块

16.6.1 C++封装

16.6.2 discard协议

16.6.3 time协议

16.6.4 chargen协议

16.7 总结

第17章 Nginx HTTP机制

17.1 结构定义

17.1.1 ngx_http_state_e

17.1.2 ngx_http_connection_t

17.1.3 ngx_http_request_t

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.4 处理请求体

17.4.1 丢弃缓冲区数据

17.4.2 读取并丢弃数据

17.4.3 读事件处理函数

17.4.4 启动丢弃处理

17.5 发送数据

17.5.1 发送初始化

17.5.2 事件处理函数

17.6 结束请求

17.6.1 释放请求资源

17.6.2 检查引用计数结束请求

17.6.3 检查状态结束请求

17.6.4 综合处理结束请求

17.7 总结

第18章 Nginx与设计模式

18.1 设计模式简介

18.2 框架级别的模式

18.3 业务级别的模式

18.4 代码级别的模式

18.5 总结

第19章 OpenResty开发

19.1 简介

19.1.1 历史

19.1.2 版本

19.1.3 组成

19.1.4 性能

19.1.5 安装

19.1.6 目录结构

19.1.7 命令行工具

19.1.8 参考手册

19.2 Lua语言

19.2.1 注释

19.2.2 数据类型

19.2.3 变量

19.2.4 运算

19.2.5 语句

19.2.6 函数

19.2.7 表

19.2.8 标准库

19.2.9 模块

19.3 LuaJIT

19.3.1 continue

19.3.2 bit

19.3.3 ffi

19.4 Lua模块

19.4.1 指令简介

19.4.2 配置指令

19.4.3 功能指令

19.4.4 指令关系图

19.4.5 应用开发流程

19.5 功能接口

19.5.1 运行日志

19.5.2 时间与日期

19.5.3 变量

19.5.4 正则表达式

19.5.5 请求处理

19.5.6 请求转发

19.5.7 子请求

19.5.8 定时器

19.5.9 共享内存

19.6 应用实例

19.6.1 处理请求

19.6.2 过滤请求

19.6.3 转发请求

19.6.4 子请求

19.7 Stream Lua模块

19.7.1 功能接口

19.7.2 discard

19.7.3 time

19.7.4 chargen

19.7.5 echo

19.8 lua-resty库

19.8.1 core

19.8.2 cjson

19.8.3 redis

19.9 总结

第20章 结束语

20.1 本书的遗憾

20.2 下一步

20.3 临别赠言

附录A 推荐书目

附录B GDB调试简介

附录C Nginx C++模块简介

附录D Nginx的字符串格式化

附录E nginScript简介

累计评论(4条) 4个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部