Nginx完全开发指南:使用C、C++、JavaScript和Lua

Nginx完全开发指南:使用C、C++、JavaScript和Lua
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2019-06
版次: 1
ISBN: 9787121364365
定价: 109.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 608页
字数: 871千字
正文语种: 简体中文
28人买过
  • Nginx是著名的Web服务器,性能优异,运行效率远超传统的Apache、Tomcat,广泛应用于国内外诸多**互联网公司。Nginx的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004年发布至今,已经拥有百余个官方及非官方的功能模块(如proxy、mysql、redis、rtmp、lua等),使得Nginx成长为了一个近乎“全能”的服务器软件。Nginx功能强大,架构复杂,学习、维护和开发的门槛较高。为了帮助读者跨越这一障碍,本书深入*新的Nginx源码(Stable 1.16.0),详细剖析了模块体系、动态插件、功能框架、内存分配、进程模型、事件驱动、线程池、TCP/UDP/HTTP处理等Nginx核心运行机制,在此基础上讲解如何使用C、C++、JavaScript、Lua等语言来增强扩展Nginx,让任何人都能够便捷、轻松地开发和定制Nginx,进而应用到自己的实际工作中,创造出更多的价值。本书结构严谨、脉络清晰、论述精确、详略得当、图文并茂,值得广大软件开发工程师、系统运维工程师和编程爱好者拥有。 罗剑锋1996年就读于东北财经大学;1997年开始接触C/C++;1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质;2003年毕业于北京理工大学,获计算机专业硕士学位。主要研究方向为C/C++、设计模式、高性能网络服务器开发,业余爱好是阅读、欣赏音乐和旅游。 目录 

    第0章 导读 1 

    0.1 于本书 1 

    0.2 读者对象 3 

    0.3 读者要求 4 

    0.4 运行环境 5 

    0.5 本书的结构 5 

    0.6 如何阅读本书 6 

    0.7 本书的源码 7 

    第1章 Nginx入门 8 

    1.1 关于Nginx 8 

    1.1.1 历史 9 

    1.1.2 特点 9 

    1.1.3 进程模型 10 

    1.1.4 版本 12 

    1.2 安装Nginx 12 

    1.2.1 准备工作 13 

    1.2.2 快速安装 13 

    1.2.3 运行命令 14 

    1.2.4 验证安装 15 

    1.2.5 定制安装 16 

    1.3 配置Nginx 18 

    1.3.1 语法格式 19 

    1.3.2 进程管理 20 

    1.3.3 动态模块 22 

    1.3.4 运行日志 22 

    1.3.5 事件机制 22 

    1.4 HTTP服务 23 

    1.4.1 基本配置 24 

    1.4.3 location配置 25 

    1.4.4 file配置 26 

    1.5 TCP/UDP服务 27 

    1.6 反向代理 28 

    1.6.1 上游集群 28 

    1.6.2 负载均衡 29 

    1.6.3 代理转发 30 

    1.7 变量 30 

    1.8 总结 32 

    第2章 Nginx开发准备 33 

    2.1 源码结构 33 

    2.2 源码特点 34 

    2.2.1 代码风格 34 

    2.2.2 代码优化 35 

    2.2.3 面向对象思想 35 

    2.3 头文件 36 

    2.4 总结 36 

    第3章 Nginx基础设施 37 

    3.1 常数 37 

    3.1.1 环境信息 37 

    3.1.2 版本信息 38 

    3.1.3 错误码 38 

    3.2 整数类型 39 

    3.2.1 标准整数类型 39 

    3.2.2 自用整数类型 40 

    3.2.3 无效值 40 

    3.3 内存池 42 

    3.3.1 结构定义 42 

    3.3.2 操作函数 43 

    3.3.3 用法示例 44 

    3.4 字符串 44 

    3.4.1 结构定义 44 

    3.4.2 操作函数 45 

    3.4.3 用法示例 48 

    3.5 时间 49 

    3.5.1 结构定义 49 

    3.5.2 操作函数 49 

    3.5.3 用法示例 50 

    3.6 日期 50 

    3.6.1 结构定义 50 

    3.6.2 操作函数 51 

    3.6.3 用法示例 52 

    3.7 运行日志 52 

    3.7.1 结构定义 52 

    3.7.2 操作函数 53 

    3.7.3 用法示例 54 

    3.8 摘要算法 54 

    3.8.1 Times33 55 

    3.8.2 CRC 55 

    3.8.3 MurmurHash 56 

    3.8.4 MD5 57 

    3.8.5 SHA-1 57 

    3.9 数据编码 58 

    3.9.1 Base64 58 

    3.9.2 HTML/JSON 59 

    3.10 总结 60 

    第4章 Nginx高级数据结构 61 

    4.1 动态数组 61 

    4.1.1 结构定义 62 

    4.1.2 操作函数 63 

    4.1.3 用法示例 64 

    4.2 单向链表 65 

    4.2.1 结构定义 65 

    4.2.2 操作函数 66 

    4.2.3 用法示例 66 

    4.3 双端队列 68 

    4.3.1 结构定义 68 

    4.3.2 操作函数 69 

    4.3.3 用法示例 71 

    4.4 红黑树 72 

    4.4.1 结构定义 73 

    4.4.2 操作函数 75 

    4.4.3 用法示例 76 

    4.5 缓冲区 78 

    4.5.1 结构定义 78 

    4.5.2 操作函数 80 

    4.5.3 用法示例 81 

    4.6 数据块链 82 

    4.6.1 结构定义 82 

    4.6.2 操作函数 83 

    4.6.3 用法示例 83 

    4.7 总结 84 

    第5章 Nginx开发概述 85 

    5.1 开发示例 85 

    5.1.1 模块设计 85 

    5.1.2 配置解析 86 

    5.1.3 处理函数 88 

    5.1.4 模块集成 90 

    5.1.5 编译脚本 91 

    5.1.6 测试验证 92 

    5.2 开发流程 92 

    5.2.1 设计 93 

    5.2.2 开发 93 

    5.2.3 编译 94 

    5.2.4 测试验证 94 

    5.2.5 调优 94 

    5.2.6 流程图 95 

    5.3 编译脚本 95 

    5.3.1 运行机制 96 

    5.3.2 脚本变量 96 

    5.3.3 添加模块 97 

    5.3.4 脚本格式 97 

    5.3.5 旧式脚本 98 

    5.4 总结 99 

    第6章 Nginx模块体系 100 

    6.1 模块架构 100 

    6.1.1 结构定义 100 

    6.1.2 模块的签名 102 

    6.1.3 模块的种类 103 

    6.1.4 模块的函数指针表 104 

    6.1.5 模块的类图 105 

    6.1.6 模块的组织形式 106 

    6.1.7 模块的静态加载 108 

    6.1.8 模块的动态加载 110 

    6.2 配置解析 113 

    6.2.1 结构定义 113 

    6.2.2 基本流程 116 

    6.2.3 存储模型 118 

    6.2.4 访问配置数据 122 

    6.2.5 配置数据的位置 123 

    6.2.6 配置数据的解析 124 

    6.2.7 配置数据的合并 126 

    6.2.8 配置指令的类型 127 

    6.3 源码分析 128 

    6.3.1 ngx_core_module 128 

    6.3.2 ngx_errlog_module 130 

    6.4 总结 132 

    第7章 Nginx功能框架 134 

    7.1 框架简介 134 

    7.1.1 模块分类 134 

    7.1.2 处理流程 135 

    7.1.3 请求的处理阶段 137 

    7.1.4 请求结构体 138 

    7.1.5 请求的环境数据 140 

    7.2 处理引擎 141 

    7.2.1 函数原型 141 

    7.2.2 处理函数的存储方式 141 

    7.2.3 内容处理函数 142 

    7.2.4 引擎的数据结构 143 

    7.2.5 引擎的初始化 144 

    7.2.6 引擎的运行机制 145 

    7.2.7 日志阶段的处理 148 

    7.3 过滤引擎 148 

    7.3.1 函数原型 148 

    7.3.2 过滤函数链表 149 

    7.3.3 过滤函数的顺序 150 

    7.3.4 过滤链表的运行机制 152 

    7.3.5 请求体过滤 153 

    7.4 源码分析 153 

    7.4.1 ngx_http_static_module 154 

    7.4.2 ngx_http_not_modified_filter_module 155 

    7.5 总结 156 

    第8章 Nginx请求处理 158 

    8.1 状态码 158 

    8.2 请求结构体 159 

    8.3 请求行 160 

    8.3.1 请求方法 160 

    8.3.2 协议版本号 161 

    8.3.3 资源标识符 161 

    8.4 请求头 162 

    8.5 请求体 163 

    8.5.1 结构定义 163 

    8.5.2 操作函数 164 

    8.6 响应头 164 

    8.6.1 结构定义 164 

    8.6.2 操作函数 165 

    8.7 响应体 166 

    8.8 源码分析 166 

    8.8.1 ngx_http_static_module 166 

    8.8.2 ngx_http_not_modified_filter_module 168 

    8.9 开发示例:content handler 169 

    8.9.1 模块设计 169 

    8.9.2 配置数据 169 

    8.9.3 处理函数 170 

    8.9.4 注册函数 171 

    8.9.5 模块集成 172 

    8.9.6 编译脚本 173 

    8.9.7 测试验证 173 

    8.10 开发示例:filter 173 

    8.10.1 模块设计 173 

    8.10.2 配置数据 174 

    8.10.3 环境数据 174 

    8.10.4 注册过滤函数 175 

    8.10.5 过滤响应头 175 

    8.10.6 过滤响应体 176 

    8.10.7 模块集成 178 

    8.10.8 编译脚本 179 

    8.10.9 测试验证 179 

    8.11 总结 180 

    第9章 Nginx请求转发 181 

    9.1 框架简介 181 

    9.1.1 工作原理 182 

    9.1.2 请求结构体 183 

    9.1.3 上游结构体 184 

    9.1.4 上游配置参数 185 

    9.2 请求转发 186 

    9.2.1 回调函数 186 

    9.2.2 初始化 188 

    9.2.3 设置参数 189 

    9.2.4 启动连接 190 

    9.2.5 处理响应头 190 

    9.2.6 处理响应体 191 

    9.3 负载均衡 192 

    9.3.1 结构定义 192 

    9.3.2 初始化模块入口 196 

    9.3.3 初始化地址列表 197 

    9.3.4 初始化算法 199 

    9.3.5 执行算法 200 

    9.4 源码分析 200 

    9.4.1 ngx_http_memcached_module 201 

    9.4.2 ngx_http_upstream_ip_hash_module 203 

    9.5 开发示例:upstream 206 

    9.5.1 模块设计 206 

    9.5.2 配置数据 206 

    9.5.3 上行数据 208 

    9.5.4 下行数据 208 

    9.5.5 启动转发 209 

    9.5.6 注册函数 210 

    9.5.7 模块集成 210 

    9.5.8 编译脚本 211 

    9.5.9 测试验证 212 

    9.6 开发示例:balance 212 

    9.6.1 模块设计 212 

    9.6.2 配置数据 212 

    9.6.3 算法数据结构 213 

    9.6.4 模块入口 213 

    9.6.5 算法实现 214 

    9.6.6 模块集成 215 

    9.6.7 编译脚本 216 

    9.6.8 测试验证 216 

    9.7 总结 216 

    第10章 Nginx子请求 218 

    10.1 框架简介 218 

    10.1.1 工作原理 219 

    10.1.2 请求结构体 220 

    10.1.3 回调函数 221 

    10.1.4 待处理请求链表 223 

    10.1.5 子请求存储结构 223 

    10.2 运行机制 223 

    10.2.1 创建子请求 224 

    10.2.2 处理引擎 228 

    10.2.3 数据整理 229 

    10.3 开发示例 230 

    10.3.1 模块设计 231 

    10.3.2 配置数据 231 

    10.3.3 环境数据 231 

    10.3.4 回调函数 231 

    10.3.5 处理函数 232 

    10.3.6 注册函数 233 

    10.3.7 测试验证 234 

    10.4 总结 234 

    第11章 Nginx变量 236 

    11.1 结构定义 236 

    11.1.1 变量 237 

    11.1.2 复杂变量 238 

    11.1.3 变量的存储 239 

    11.1.4 请求结构体 239 

    11.2 操作变量 240 

    11.2.1 添加变量 240 

    11.2.2 获取变量 241 

    11.2.3 修改变量 242 

    11.2.4 编译复杂变量 242 

    11.2.5 获取复杂变量 242 

    11.3 开发示例:变量 243 

    11.3.1 模块设计 243 

    11.3.2 定义变量 243 

    11.3.3 添加变量 244 

    11.3.4 获取变量 244 

    11.3.5 测试验证 245 

    11.4 开发示例:复杂变量 246 

    11.4.1 模块设计 246 

    11.4.2 定义复杂变量 246 

    11.4.3 编译复杂变量 246 

    11.4.4 获取复杂变量 247 

    11.4.5 测试验证 247 

    11.5 总结 247 

    第12章 Nginx内存管理机制 249 

    12.1 基本系统调用 250 

    12.1.1 malloc 250 

    12.1.2 posix_memalign 251 

    12.1.3 free 251 

    12.2 块式内存池 252 

    12.2.1 结构定义 252 

    12.2.2 常量定义 255 

    12.2.3 创建内存池 255 

    12.2.4 分配内存 257 

    12.2.5 分配大块内存 258 

    12.2.6 分配小块内存 259 

    12.2.7 释放内存 264 

    12.2.8 清理机制 264 

    12.2.9 清空内存池 265 

    12.2.10 销毁内存池 266 

    12.3 页式内存池 267 

    12.3.1 结构定义 268 

    12.3.2 常量定义 270 

    12.3.3 初始化内存池 271 

    12.3.4 分配内存 273 

    12.3.5 分配大块内存 275 

    12.3.6 分配小块内存 277 

    12.3.7 释放内存 280 

    12.4 总结 282 

    第13章 Nginx进程机制 284 

    13.1 基本系统调用 284 

    13.1.1 errno 284 

    13.1.2 getrlimit 285 

    13.2 进程系统调用 285 

    13.2.1 getpid 285 

    13.2.2 fork 286 

    13.2.3 waitpid 286 

    13.3 信号系统调用 287 

    13.3.1 kill 287 

    13.3.2 sigaction 288 

    13.3.3 sigsuspend 288 

    13.4 结构定义 288 

    13.4.1 ngx_cycle_t 288 

    13.4.2 ngx_core_conf_t 289 

    13.4.3 ngx_process_t 290 

    13.5 全局变量 291 

    13.5.1 命令行相关 291 

    13.5.2 操作系统相关 292 

    13.5.3 进程功能相关 292 

    13.5.4 信号功能相关 293 

    13.6 启动过程 293 

    13.6.1 基本流程 293 

    13.6.2 解析命令行 294 

    13.6.3 版本和帮助信息 294 

    13.6.4 初始化cycle 294 

    13.6.5 测试配置 296 

    13.6.6 发送信号 297 

    13.6.7 守护进程化 297 

    13.6.8 启动工作进程 298 

    13.6.9 流程图 298 

    13.7 信号处理 299 

    13.7.1 信号处理函数 300 

    13.7.2 发送信号 300 

    13.7.3 处理信号 301 

    13.8 单进程模式 302 

    13.8.1 single进程 302 

    13.8.2 single进程流程图 304 

    13.9 多进程模式 304 

    13.9.1 产生子进程 304 

    13.9.2 master进程 306 

    13.9.3 master进程流程图 309 

    13.9.4 worker进程 310 

    13.9.5 worker进程流程图 312 

    13.10 总结 313 

    第14章 Nginx进程间通信机制 315 

    14.1 基本系统调用 315 

    14.1.1 atomic 315 

    14.1.2 sched_yield 316 

    14.1.3 semaphore 316 

    14.1.4 mmap 317 

    14.2 共享内存(Ⅰ) 317 

    14.2.1 结构定义 317 

    14.2.2 创建共享内存 317 

    14.2.3 使用共享内存 318 

    14.3 自旋锁 318 

    14.3.1 自旋锁定 319 

    14.3.2 解除锁定 320 

    14.3.3 使用自旋锁 320 

    14.4 互斥锁 320 

    14.4.1 结构定义 320 

    14.4.2 创建互斥锁 321 

    14.4.3 互斥锁定 322 

    14.4.4 解除锁定 323 

    14.4.5 销毁互斥锁 324 

    14.4.6 使用互斥锁 324 

    14.5 读写锁 325 

    14.5.1 写锁定 325 

    14.5.2 读锁定 325 

    14.5.3 解除锁定 326 

    14.5.4 降级锁定 326 

    14.5.5 使用读写锁 327 

    14.6 共享内存(Ⅱ) 327 

    14.6.1 结构定义 327 

    14.6.2 添加共享内存 328 

    14.6.3 创建共享内存 329 

    14.6.4 使用共享内存 330 

    14.7 总结 331 

    第15章 Nginx事件机制 333 

    15.1 基本系统调用 333 

    15.1.1 errno 334 

    15.1.2 ioctl 334 

    15.1.3 setitimer 334 

    15.1.4 gettimeofday 334 

    15.2 socket系统调用 335 

    15.2.1 socket 335 

    15.2.2 bind 335 

    15.2.3 listen 336 

    15.2.4 accept 336 

    15.2.5 connect 336 

    15.2.6 recv 336 

    15.2.7 send 337 

    15.2.8 setsockopt 337 

    15.2.9 close 337 

    15.2.10 函数关系图 338 

    15.3 epoll系统调用 338 

    15.3.1 epoll_create 339 

    15.3.2 epoll_ctl 339 

    15.3.3 epoll_wait 340 

    15.3.4 LT和ET 341 

    15.3.5 函数关系图 342 

    15.4 结构定义 342 

    15.4.1 ngx_event_t 342 

    15.4.2 ngx_connection_t 343 

    15.4.3 ngx_listening_t 345 

    15.4.4 ngx_cycle_t 346 

    15.4.5 ngx_os_io_t 347 

    15.4.6 ngx_event_actions_t 351 

    15.4.7 ngx_posted_events 353 

    15.4.8 关系图 354 

    15.5 定时器 354 

    15.5.1 红黑树 354 

    15.5.2 操作函数 355 

    15.5.3 超时处理 355 

    15.6 模块体系 358 

    15.6.1 函数指针表 358 

    15.6.2 模块的组织形式 359 

    15.6.3 核心配置 361 

    15.6.4 epoll模块 362 

    15.7 全局变量 363 

    15.7.1 更新时间相关 363 

    15.7.2 事件机制相关 364 

    15.7.3 负载均衡相关 365 

    15.7.4 统计相关 365 

    15.8 进程初始化 366 

    15.8.1 初始化函数 366 

    15.8.2 基本参数初始化 368 

    15.8.3 事件机制初始化 369 

    15.8.4 连接池初始化 370 

    15.8.5 监听端口初始化 371 

    15.8.6 初始化流程图 373 

    15.9 运行机制 373 

    15.9.1 添加事件 374 

    15.9.2 删除事件 377 

    15.9.3 处理事件 378 

    15.9.4 接受连接 382 

    15.9.5 负载均衡 384 

    15.10 避免阻塞 389 

    15.11 总结 390 

    第16章 Nginx多线程机制 392 

    16.1 eventfd系统调用 392 

    16.2 pthread系统调用 393 

    16.3 结构定义 393 

    16.3.1 ngx_thread_task_t 394 

    16.3.2 ngx_thread_pool_queue_t 394 

    16.3.3 ngx_thread_pool_t 395 

    16.3.4 结构关系图 396 

    16.4 事件通知 396 

    16.4.1 函数接口 396 

    16.4.2 初始化 397 

    16.4.3 发送通知 398 

    16.4.4 处理通知 398 

    16.5 运行机制 399 

    16.5.1 完成任务队列 399 

    16.5.2 创建线程池 399 

    16.5.3 创建任务 400 

    16.5.4 投递任务 401 

    16.5.5 执行任务 402 

    16.5.6 任务完成回调 404 

    16.5.7 销毁线程池 405 

    16.6 开发示例 406 

    16.6.1 模块设计 406 

    16.6.2 配置数据 407 

    16.6.3 线程任务 407 

    16.6.4 任务完成回调 408 

    16.6.5 投递任务 409 

    16.6.6 测试验证 410 

    16.7 总结 410 

    第17章 Nginx Stream机制 412 

    17.1 模块体系 412 

    17.1.1 函数指针表 413 

    17.1.2 基础模块 413 

    17.1.3 核心模块 415 

    17.1.4 结构关系图 416 

    17.1.5 存储模型 416 

    17.2 监听端口 418 

    17.2.1 结构定义 418 

    17.2.2 解析配置 420 

    17.2.3 启动监听 424 

    17.3 处理引擎 425 

    17.3.1 阶段定义 426 

    17.3.2 函数原型 426 

    17.3.3 处理函数的存储方式 426 

    17.3.4 引擎数据结构 427 

    17.3.5 结构关系图 428 

    17.3.6 引擎的初始化 428 

    17.4 过滤引擎 430 

    17.4.1 函数原型 430 

    17.4.2 过滤函数链表 430 

    17.5 运行机制 431 

    17.5.1 会话结构体 431 

    17.5.2 创建会话 432 

    17.5.3 执行引擎 435 

    17.5.4 通用阶段处理 437 

    17.5.5 预读数据 438 

    17.5.6 产生响应数据 442 

    17.5.7 过滤数据 442 

    17.5.8 结束会话 442 

    17.6 开发示例 443 

    17.6.1 discard协议 444 

    17.6.2 time协议 446 

    17.6.3 echo协议 448 

    17.7 总结 450 

    第18章 Nginx HTTP机制 452 

    18.1 结构定义 452 

    18.1.1 ngx_http_state_e 452 

    18.1.2 ngx_http_connection_t 453 

    18.1.3 ngx_http_request_t 453 

    18.2 初始化连接 454 

    18.2.1 建立连接 455 

    18.2.2 等待数据 456 

    18.2.3 读取请求头 458 

    18.3 执行引擎 463 

    18.3.1 初始化引擎 463 

    18.3.2 通用阶段 465 

    18.3.3 改写阶段 466 

    18.3.4 访问控制阶段 467 

    18.3.5 内容产生阶段 469 

    18.4 处理请求体 470 

    18.4.1 丢弃缓冲区数据 470 

    18.4.2 读取并丢弃数据 471 

    18.4.3 读事件处理函数 473 

    18.4.4 启动丢弃处理 474 

    18.5 发送数据 475 

    18.5.1 发送初始化 475 

    18.5.2 事件处理函数 476 

    18.6 结束请求 478 

    18.6.1 释放请求资源 478 

    18.6.2 检查引用计数结束请求 479 

    18.6.3 检查状态结束请求 480 

    18.6.4 综合处理结束请求 481 

    18.7 总结 483 

    第19章 Nginx与设计模式 485 

    19.1 设计模式简介 485 

    19.2 框架级别的模式 485 

    19.3 业务级别的模式 487 

    19.4 代码级别的模式 488 

    19.5 总结 490 

    第20章 Nginx C++开发 491 

    20.1 语言简介 491 

    20.2 开发准备 492 

    20.2.1 程序库 492 

    20.2.2 头文件 492 

    20.2.3 编程范式 493 

    20.2.4 实现原则 493 

    20.2.5 源码组织 494 

    20.2.6 编译脚本 495 

    20.3 封装类 497 

    20.3.1 基础设施 497 

    20.3.2 高级数据结构 500 

    20.3.3 功能框架 505 

    20.3.4 请求处理 509 

    20.4 开发示例:content handler 510 

    20.4.1 配置信息类 510 

    20.4.2 业务逻辑类 511 

    20.4.3 模块集成类 512 

    20.4.4 实现源文件 515 

    20.5 开发示例:filter 515 

    20.5.1 配置信息类 515 

    20.5.2 环境数据类 515 

    20.5.3 业务逻辑类 516 

    20.5.4 模块集成类 518 

    20.5.5 实现源文件 519 

    20.6 总结 519 

    第21章 Nginx JavaScript开发 521 

    21.1 语言简介 521 

    21.2 模块简介 522 

    21.3 开发准备 523 

    21.4 指令简介 523 

    21.5 功能接口 524 

    21.5.1 运行日志 524 

    21.5.2 变量 525 

    21.5.3 请求处理 525 

    21.5.4 子请求 527 

    21.5.5 定时器 527 

    21.5.6 流处理 527 

    21.6 开发示例 528 

    21.6.1 content handler 528 

    21.6.2 subrequest 529 

    21.6.3 A/B testing 530 

    21.7 总结 531 

    第22章 Nginx Lua开发 532 

    22.1 语言简介 532 

    22.2 模块简介 533 

    22.2.1 http_lua 533 

    22.2.2 stream_lua 533 

    22.2.3 lua-resty-lib 534 

    22.3 开发准备 534 

    22.4 指令简介 535 

    22.4.1 配置指令 536 

    22.4.2 功能指令 536 

    22.4.3 指令关系图 538 

    22.5 应用开发流程 538 

    22.6 功能接口 539 

    22.6.1 运行日志 539 

    22.6.2 时间与日期 540 

    22.6.3 变量 540 

    22.6.4 正则表达式 541 

    22.6.5 请求处理 542 

    22.6.6 请求转发 544 

    22.6.7 子请求 545 

    22.6.8 定时器 546 

    22.6.9 共享内存 546 

    22.7 开发示例 547 

    22.7.1 content handler 548 

    22.7.2 filter 549 

    22.7.3 upstream 550 

    22.7.4 subrequest 550 

    22.7.5 discard 551 

    22.7.6 echo 552 

    22.8 总结 552 

    第23章 Nginx调试与测试 554 

    23.1 调试 554 

    23.1.1 调试器 554 

    23.1.2 调试断点 555 

    23.1.3 调试日志 556 

    23.2 功能测试 558 

    23.2.1 测试套件 559 

    23.2.2 测试用例 559 

    23.2.3 运行测试 564 

    23.3 性能测试 564 

    23.3.1 ab 565 

    23.3.2 http_load 565 

    23.3.3 wrk 566 

    23.3.4 Test::Nginx 567 

    23.4 总结 568 

    第24章 Nginx性能分析 569 

    24.1 简介 569 

    24.2 火焰图 570 

    24.3 分析工具 572 

    24.3.1 使用方式 572 

    24.3.2 处理数据 573 

    24.4 动态追踪 576 

    24.4.1 CPU分析 577 

    24.4.2 I/O分析 579 

    24.4.3 Memory分析 580 

    24.4.4 观测工具 581 

    24.5 总结 582 

    第25章 结束语 583 

    25.1 本书的遗憾 583 

    25.2 下一步 583 

    25.3 临别赠言 584 

    附录A 推荐书目 585 

    附录B 字符串格式化 587 

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

    第0章 导读 1 

    0.1 于本书 1 

    0.2 读者对象 3 

    0.3 读者要求 4 

    0.4 运行环境 5 

    0.5 本书的结构 5 

    0.6 如何阅读本书 6 

    0.7 本书的源码 7 

    第1章 Nginx入门 8 

    1.1 关于Nginx 8 

    1.1.1 历史 9 

    1.1.2 特点 9 

    1.1.3 进程模型 10 

    1.1.4 版本 12 

    1.2 安装Nginx 12 

    1.2.1 准备工作 13 

    1.2.2 快速安装 13 

    1.2.3 运行命令 14 

    1.2.4 验证安装 15 

    1.2.5 定制安装 16 

    1.3 配置Nginx 18 

    1.3.1 语法格式 19 

    1.3.2 进程管理 20 

    1.3.3 动态模块 22 

    1.3.4 运行日志 22 

    1.3.5 事件机制 22 

    1.4 HTTP服务 23 

    1.4.1 基本配置 24 

    1.4.3 location配置 25 

    1.4.4 file配置 26 

    1.5 TCP/UDP服务 27 

    1.6 反向代理 28 

    1.6.1 上游集群 28 

    1.6.2 负载均衡 29 

    1.6.3 代理转发 30 

    1.7 变量 30 

    1.8 总结 32 

    第2章 Nginx开发准备 33 

    2.1 源码结构 33 

    2.2 源码特点 34 

    2.2.1 代码风格 34 

    2.2.2 代码优化 35 

    2.2.3 面向对象思想 35 

    2.3 头文件 36 

    2.4 总结 36 

    第3章 Nginx基础设施 37 

    3.1 常数 37 

    3.1.1 环境信息 37 

    3.1.2 版本信息 38 

    3.1.3 错误码 38 

    3.2 整数类型 39 

    3.2.1 标准整数类型 39 

    3.2.2 自用整数类型 40 

    3.2.3 无效值 40 

    3.3 内存池 42 

    3.3.1 结构定义 42 

    3.3.2 操作函数 43 

    3.3.3 用法示例 44 

    3.4 字符串 44 

    3.4.1 结构定义 44 

    3.4.2 操作函数 45 

    3.4.3 用法示例 48 

    3.5 时间 49 

    3.5.1 结构定义 49 

    3.5.2 操作函数 49 

    3.5.3 用法示例 50 

    3.6 日期 50 

    3.6.1 结构定义 50 

    3.6.2 操作函数 51 

    3.6.3 用法示例 52 

    3.7 运行日志 52 

    3.7.1 结构定义 52 

    3.7.2 操作函数 53 

    3.7.3 用法示例 54 

    3.8 摘要算法 54 

    3.8.1 Times33 55 

    3.8.2 CRC 55 

    3.8.3 MurmurHash 56 

    3.8.4 MD5 57 

    3.8.5 SHA-1 57 

    3.9 数据编码 58 

    3.9.1 Base64 58 

    3.9.2 HTML/JSON 59 

    3.10 总结 60 

    第4章 Nginx高级数据结构 61 

    4.1 动态数组 61 

    4.1.1 结构定义 62 

    4.1.2 操作函数 63 

    4.1.3 用法示例 64 

    4.2 单向链表 65 

    4.2.1 结构定义 65 

    4.2.2 操作函数 66 

    4.2.3 用法示例 66 

    4.3 双端队列 68 

    4.3.1 结构定义 68 

    4.3.2 操作函数 69 

    4.3.3 用法示例 71 

    4.4 红黑树 72 

    4.4.1 结构定义 73 

    4.4.2 操作函数 75 

    4.4.3 用法示例 76 

    4.5 缓冲区 78 

    4.5.1 结构定义 78 

    4.5.2 操作函数 80 

    4.5.3 用法示例 81 

    4.6 数据块链 82 

    4.6.1 结构定义 82 

    4.6.2 操作函数 83 

    4.6.3 用法示例 83 

    4.7 总结 84 

    第5章 Nginx开发概述 85 

    5.1 开发示例 85 

    5.1.1 模块设计 85 

    5.1.2 配置解析 86 

    5.1.3 处理函数 88 

    5.1.4 模块集成 90 

    5.1.5 编译脚本 91 

    5.1.6 测试验证 92 

    5.2 开发流程 92 

    5.2.1 设计 93 

    5.2.2 开发 93 

    5.2.3 编译 94 

    5.2.4 测试验证 94 

    5.2.5 调优 94 

    5.2.6 流程图 95 

    5.3 编译脚本 95 

    5.3.1 运行机制 96 

    5.3.2 脚本变量 96 

    5.3.3 添加模块 97 

    5.3.4 脚本格式 97 

    5.3.5 旧式脚本 98 

    5.4 总结 99 

    第6章 Nginx模块体系 100 

    6.1 模块架构 100 

    6.1.1 结构定义 100 

    6.1.2 模块的签名 102 

    6.1.3 模块的种类 103 

    6.1.4 模块的函数指针表 104 

    6.1.5 模块的类图 105 

    6.1.6 模块的组织形式 106 

    6.1.7 模块的静态加载 108 

    6.1.8 模块的动态加载 110 

    6.2 配置解析 113 

    6.2.1 结构定义 113 

    6.2.2 基本流程 116 

    6.2.3 存储模型 118 

    6.2.4 访问配置数据 122 

    6.2.5 配置数据的位置 123 

    6.2.6 配置数据的解析 124 

    6.2.7 配置数据的合并 126 

    6.2.8 配置指令的类型 127 

    6.3 源码分析 128 

    6.3.1 ngx_core_module 128 

    6.3.2 ngx_errlog_module 130 

    6.4 总结 132 

    第7章 Nginx功能框架 134 

    7.1 框架简介 134 

    7.1.1 模块分类 134 

    7.1.2 处理流程 135 

    7.1.3 请求的处理阶段 137 

    7.1.4 请求结构体 138 

    7.1.5 请求的环境数据 140 

    7.2 处理引擎 141 

    7.2.1 函数原型 141 

    7.2.2 处理函数的存储方式 141 

    7.2.3 内容处理函数 142 

    7.2.4 引擎的数据结构 143 

    7.2.5 引擎的初始化 144 

    7.2.6 引擎的运行机制 145 

    7.2.7 日志阶段的处理 148 

    7.3 过滤引擎 148 

    7.3.1 函数原型 148 

    7.3.2 过滤函数链表 149 

    7.3.3 过滤函数的顺序 150 

    7.3.4 过滤链表的运行机制 152 

    7.3.5 请求体过滤 153 

    7.4 源码分析 153 

    7.4.1 ngx_http_static_module 154 

    7.4.2 ngx_http_not_modified_filter_module 155 

    7.5 总结 156 

    第8章 Nginx请求处理 158 

    8.1 状态码 158 

    8.2 请求结构体 159 

    8.3 请求行 160 

    8.3.1 请求方法 160 

    8.3.2 协议版本号 161 

    8.3.3 资源标识符 161 

    8.4 请求头 162 

    8.5 请求体 163 

    8.5.1 结构定义 163 

    8.5.2 操作函数 164 

    8.6 响应头 164 

    8.6.1 结构定义 164 

    8.6.2 操作函数 165 

    8.7 响应体 166 

    8.8 源码分析 166 

    8.8.1 ngx_http_static_module 166 

    8.8.2 ngx_http_not_modified_filter_module 168 

    8.9 开发示例:content handler 169 

    8.9.1 模块设计 169 

    8.9.2 配置数据 169 

    8.9.3 处理函数 170 

    8.9.4 注册函数 171 

    8.9.5 模块集成 172 

    8.9.6 编译脚本 173 

    8.9.7 测试验证 173 

    8.10 开发示例:filter 173 

    8.10.1 模块设计 173 

    8.10.2 配置数据 174 

    8.10.3 环境数据 174 

    8.10.4 注册过滤函数 175 

    8.10.5 过滤响应头 175 

    8.10.6 过滤响应体 176 

    8.10.7 模块集成 178 

    8.10.8 编译脚本 179 

    8.10.9 测试验证 179 

    8.11 总结 180 

    第9章 Nginx请求转发 181 

    9.1 框架简介 181 

    9.1.1 工作原理 182 

    9.1.2 请求结构体 183 

    9.1.3 上游结构体 184 

    9.1.4 上游配置参数 185 

    9.2 请求转发 186 

    9.2.1 回调函数 186 

    9.2.2 初始化 188 

    9.2.3 设置参数 189 

    9.2.4 启动连接 190 

    9.2.5 处理响应头 190 

    9.2.6 处理响应体 191 

    9.3 负载均衡 192 

    9.3.1 结构定义 192 

    9.3.2 初始化模块入口 196 

    9.3.3 初始化地址列表 197 

    9.3.4 初始化算法 199 

    9.3.5 执行算法 200 

    9.4 源码分析 200 

    9.4.1 ngx_http_memcached_module 201 

    9.4.2 ngx_http_upstream_ip_hash_module 203 

    9.5 开发示例:upstream 206 

    9.5.1 模块设计 206 

    9.5.2 配置数据 206 

    9.5.3 上行数据 208 

    9.5.4 下行数据 208 

    9.5.5 启动转发 209 

    9.5.6 注册函数 210 

    9.5.7 模块集成 210 

    9.5.8 编译脚本 211 

    9.5.9 测试验证 212 

    9.6 开发示例:balance 212 

    9.6.1 模块设计 212 

    9.6.2 配置数据 212 

    9.6.3 算法数据结构 213 

    9.6.4 模块入口 213 

    9.6.5 算法实现 214 

    9.6.6 模块集成 215 

    9.6.7 编译脚本 216 

    9.6.8 测试验证 216 

    9.7 总结 216 

    第10章 Nginx子请求 218 

    10.1 框架简介 218 

    10.1.1 工作原理 219 

    10.1.2 请求结构体 220 

    10.1.3 回调函数 221 

    10.1.4 待处理请求链表 223 

    10.1.5 子请求存储结构 223 

    10.2 运行机制 223 

    10.2.1 创建子请求 224 

    10.2.2 处理引擎 228 

    10.2.3 数据整理 229 

    10.3 开发示例 230 

    10.3.1 模块设计 231 

    10.3.2 配置数据 231 

    10.3.3 环境数据 231 

    10.3.4 回调函数 231 

    10.3.5 处理函数 232 

    10.3.6 注册函数 233 

    10.3.7 测试验证 234 

    10.4 总结 234 

    第11章 Nginx变量 236 

    11.1 结构定义 236 

    11.1.1 变量 237 

    11.1.2 复杂变量 238 

    11.1.3 变量的存储 239 

    11.1.4 请求结构体 239 

    11.2 操作变量 240 

    11.2.1 添加变量 240 

    11.2.2 获取变量 241 

    11.2.3 修改变量 242 

    11.2.4 编译复杂变量 242 

    11.2.5 获取复杂变量 242 

    11.3 开发示例:变量 243 

    11.3.1 模块设计 243 

    11.3.2 定义变量 243 

    11.3.3 添加变量 244 

    11.3.4 获取变量 244 

    11.3.5 测试验证 245 

    11.4 开发示例:复杂变量 246 

    11.4.1 模块设计 246 

    11.4.2 定义复杂变量 246 

    11.4.3 编译复杂变量 246 

    11.4.4 获取复杂变量 247 

    11.4.5 测试验证 247 

    11.5 总结 247 

    第12章 Nginx内存管理机制 249 

    12.1 基本系统调用 250 

    12.1.1 malloc 250 

    12.1.2 posix_memalign 251 

    12.1.3 free 251 

    12.2 块式内存池 252 

    12.2.1 结构定义 252 

    12.2.2 常量定义 255 

    12.2.3 创建内存池 255 

    12.2.4 分配内存 257 

    12.2.5 分配大块内存 258 

    12.2.6 分配小块内存 259 

    12.2.7 释放内存 264 

    12.2.8 清理机制 264 

    12.2.9 清空内存池 265 

    12.2.10 销毁内存池 266 

    12.3 页式内存池 267 

    12.3.1 结构定义 268 

    12.3.2 常量定义 270 

    12.3.3 初始化内存池 271 

    12.3.4 分配内存 273 

    12.3.5 分配大块内存 275 

    12.3.6 分配小块内存 277 

    12.3.7 释放内存 280 

    12.4 总结 282 

    第13章 Nginx进程机制 284 

    13.1 基本系统调用 284 

    13.1.1 errno 284 

    13.1.2 getrlimit 285 

    13.2 进程系统调用 285 

    13.2.1 getpid 285 

    13.2.2 fork 286 

    13.2.3 waitpid 286 

    13.3 信号系统调用 287 

    13.3.1 kill 287 

    13.3.2 sigaction 288 

    13.3.3 sigsuspend 288 

    13.4 结构定义 288 

    13.4.1 ngx_cycle_t 288 

    13.4.2 ngx_core_conf_t 289 

    13.4.3 ngx_process_t 290 

    13.5 全局变量 291 

    13.5.1 命令行相关 291 

    13.5.2 操作系统相关 292 

    13.5.3 进程功能相关 292 

    13.5.4 信号功能相关 293 

    13.6 启动过程 293 

    13.6.1 基本流程 293 

    13.6.2 解析命令行 294 

    13.6.3 版本和帮助信息 294 

    13.6.4 初始化cycle 294 

    13.6.5 测试配置 296 

    13.6.6 发送信号 297 

    13.6.7 守护进程化 297 

    13.6.8 启动工作进程 298 

    13.6.9 流程图 298 

    13.7 信号处理 299 

    13.7.1 信号处理函数 300 

    13.7.2 发送信号 300 

    13.7.3 处理信号 301 

    13.8 单进程模式 302 

    13.8.1 single进程 302 

    13.8.2 single进程流程图 304 

    13.9 多进程模式 304 

    13.9.1 产生子进程 304 

    13.9.2 master进程 306 

    13.9.3 master进程流程图 309 

    13.9.4 worker进程 310 

    13.9.5 worker进程流程图 312 

    13.10 总结 313 

    第14章 Nginx进程间通信机制 315 

    14.1 基本系统调用 315 

    14.1.1 atomic 315 

    14.1.2 sched_yield 316 

    14.1.3 semaphore 316 

    14.1.4 mmap 317 

    14.2 共享内存(Ⅰ) 317 

    14.2.1 结构定义 317 

    14.2.2 创建共享内存 317 

    14.2.3 使用共享内存 318 

    14.3 自旋锁 318 

    14.3.1 自旋锁定 319 

    14.3.2 解除锁定 320 

    14.3.3 使用自旋锁 320 

    14.4 互斥锁 320 

    14.4.1 结构定义 320 

    14.4.2 创建互斥锁 321 

    14.4.3 互斥锁定 322 

    14.4.4 解除锁定 323 

    14.4.5 销毁互斥锁 324 

    14.4.6 使用互斥锁 324 

    14.5 读写锁 325 

    14.5.1 写锁定 325 

    14.5.2 读锁定 325 

    14.5.3 解除锁定 326 

    14.5.4 降级锁定 326 

    14.5.5 使用读写锁 327 

    14.6 共享内存(Ⅱ) 327 

    14.6.1 结构定义 327 

    14.6.2 添加共享内存 328 

    14.6.3 创建共享内存 329 

    14.6.4 使用共享内存 330 

    14.7 总结 331 

    第15章 Nginx事件机制 333 

    15.1 基本系统调用 333 

    15.1.1 errno 334 

    15.1.2 ioctl 334 

    15.1.3 setitimer 334 

    15.1.4 gettimeofday 334 

    15.2 socket系统调用 335 

    15.2.1 socket 335 

    15.2.2 bind 335 

    15.2.3 listen 336 

    15.2.4 accept 336 

    15.2.5 connect 336 

    15.2.6 recv 336 

    15.2.7 send 337 

    15.2.8 setsockopt 337 

    15.2.9 close 337 

    15.2.10 函数关系图 338 

    15.3 epoll系统调用 338 

    15.3.1 epoll_create 339 

    15.3.2 epoll_ctl 339 

    15.3.3 epoll_wait 340 

    15.3.4 LT和ET 341 

    15.3.5 函数关系图 342 

    15.4 结构定义 342 

    15.4.1 ngx_event_t 342 

    15.4.2 ngx_connection_t 343 

    15.4.3 ngx_listening_t 345 

    15.4.4 ngx_cycle_t 346 

    15.4.5 ngx_os_io_t 347 

    15.4.6 ngx_event_actions_t 351 

    15.4.7 ngx_posted_events 353 

    15.4.8 关系图 354 

    15.5 定时器 354 

    15.5.1 红黑树 354 

    15.5.2 操作函数 355 

    15.5.3 超时处理 355 

    15.6 模块体系 358 

    15.6.1 函数指针表 358 

    15.6.2 模块的组织形式 359 

    15.6.3 核心配置 361 

    15.6.4 epoll模块 362 

    15.7 全局变量 363 

    15.7.1 更新时间相关 363 

    15.7.2 事件机制相关 364 

    15.7.3 负载均衡相关 365 

    15.7.4 统计相关 365 

    15.8 进程初始化 366 

    15.8.1 初始化函数 366 

    15.8.2 基本参数初始化 368 

    15.8.3 事件机制初始化 369 

    15.8.4 连接池初始化 370 

    15.8.5 监听端口初始化 371 

    15.8.6 初始化流程图 373 

    15.9 运行机制 373 

    15.9.1 添加事件 374 

    15.9.2 删除事件 377 

    15.9.3 处理事件 378 

    15.9.4 接受连接 382 

    15.9.5 负载均衡 384 

    15.10 避免阻塞 389 

    15.11 总结 390 

    第16章 Nginx多线程机制 392 

    16.1 eventfd系统调用 392 

    16.2 pthread系统调用 393 

    16.3 结构定义 393 

    16.3.1 ngx_thread_task_t 394 

    16.3.2 ngx_thread_pool_queue_t 394 

    16.3.3 ngx_thread_pool_t 395 

    16.3.4 结构关系图 396 

    16.4 事件通知 396 

    16.4.1 函数接口 396 

    16.4.2 初始化 397 

    16.4.3 发送通知 398 

    16.4.4 处理通知 398 

    16.5 运行机制 399 

    16.5.1 完成任务队列 399 

    16.5.2 创建线程池 399 

    16.5.3 创建任务 400 

    16.5.4 投递任务 401 

    16.5.5 执行任务 402 

    16.5.6 任务完成回调 404 

    16.5.7 销毁线程池 405 

    16.6 开发示例 406 

    16.6.1 模块设计 406 

    16.6.2 配置数据 407 

    16.6.3 线程任务 407 

    16.6.4 任务完成回调 408 

    16.6.5 投递任务 409 

    16.6.6 测试验证 410 

    16.7 总结 410 

    第17章 Nginx Stream机制 412 

    17.1 模块体系 412 

    17.1.1 函数指针表 413 

    17.1.2 基础模块 413 

    17.1.3 核心模块 415 

    17.1.4 结构关系图 416 

    17.1.5 存储模型 416 

    17.2 监听端口 418 

    17.2.1 结构定义 418 

    17.2.2 解析配置 420 

    17.2.3 启动监听 424 

    17.3 处理引擎 425 

    17.3.1 阶段定义 426 

    17.3.2 函数原型 426 

    17.3.3 处理函数的存储方式 426 

    17.3.4 引擎数据结构 427 

    17.3.5 结构关系图 428 

    17.3.6 引擎的初始化 428 

    17.4 过滤引擎 430 

    17.4.1 函数原型 430 

    17.4.2 过滤函数链表 430 

    17.5 运行机制 431 

    17.5.1 会话结构体 431 

    17.5.2 创建会话 432 

    17.5.3 执行引擎 435 

    17.5.4 通用阶段处理 437 

    17.5.5 预读数据 438 

    17.5.6 产生响应数据 442 

    17.5.7 过滤数据 442 

    17.5.8 结束会话 442 

    17.6 开发示例 443 

    17.6.1 discard协议 444 

    17.6.2 time协议 446 

    17.6.3 echo协议 448 

    17.7 总结 450 

    第18章 Nginx HTTP机制 452 

    18.1 结构定义 452 

    18.1.1 ngx_http_state_e 452 

    18.1.2 ngx_http_connection_t 453 

    18.1.3 ngx_http_request_t 453 

    18.2 初始化连接 454 

    18.2.1 建立连接 455 

    18.2.2 等待数据 456 

    18.2.3 读取请求头 458 

    18.3 执行引擎 463 

    18.3.1 初始化引擎 463 

    18.3.2 通用阶段 465 

    18.3.3 改写阶段 466 

    18.3.4 访问控制阶段 467 

    18.3.5 内容产生阶段 469 

    18.4 处理请求体 470 

    18.4.1 丢弃缓冲区数据 470 

    18.4.2 读取并丢弃数据 471 

    18.4.3 读事件处理函数 473 

    18.4.4 启动丢弃处理 474 

    18.5 发送数据 475 

    18.5.1 发送初始化 475 

    18.5.2 事件处理函数 476 

    18.6 结束请求 478 

    18.6.1 释放请求资源 478 

    18.6.2 检查引用计数结束请求 479 

    18.6.3 检查状态结束请求 480 

    18.6.4 综合处理结束请求 481 

    18.7 总结 483 

    第19章 Nginx与设计模式 485 

    19.1 设计模式简介 485 

    19.2 框架级别的模式 485 

    19.3 业务级别的模式 487 

    19.4 代码级别的模式 488 

    19.5 总结 490 

    第20章 Nginx C++开发 491 

    20.1 语言简介 491 

    20.2 开发准备 492 

    20.2.1 程序库 492 

    20.2.2 头文件 492 

    20.2.3 编程范式 493 

    20.2.4 实现原则 493 

    20.2.5 源码组织 494 

    20.2.6 编译脚本 495 

    20.3 封装类 497 

    20.3.1 基础设施 497 

    20.3.2 高级数据结构 500 

    20.3.3 功能框架 505 

    20.3.4 请求处理 509 

    20.4 开发示例:content handler 510 

    20.4.1 配置信息类 510 

    20.4.2 业务逻辑类 511 

    20.4.3 模块集成类 512 

    20.4.4 实现源文件 515 

    20.5 开发示例:filter 515 

    20.5.1 配置信息类 515 

    20.5.2 环境数据类 515 

    20.5.3 业务逻辑类 516 

    20.5.4 模块集成类 518 

    20.5.5 实现源文件 519 

    20.6 总结 519 

    第21章 Nginx JavaScript开发 521 

    21.1 语言简介 521 

    21.2 模块简介 522 

    21.3 开发准备 523 

    21.4 指令简介 523 

    21.5 功能接口 524 

    21.5.1 运行日志 524 

    21.5.2 变量 525 

    21.5.3 请求处理 525 

    21.5.4 子请求 527 

    21.5.5 定时器 527 

    21.5.6 流处理 527 

    21.6 开发示例 528 

    21.6.1 content handler 528 

    21.6.2 subrequest 529 

    21.6.3 A/B testing 530 

    21.7 总结 531 

    第22章 Nginx Lua开发 532 

    22.1 语言简介 532 

    22.2 模块简介 533 

    22.2.1 http_lua 533 

    22.2.2 stream_lua 533 

    22.2.3 lua-resty-lib 534 

    22.3 开发准备 534 

    22.4 指令简介 535 

    22.4.1 配置指令 536 

    22.4.2 功能指令 536 

    22.4.3 指令关系图 538 

    22.5 应用开发流程 538 

    22.6 功能接口 539 

    22.6.1 运行日志 539 

    22.6.2 时间与日期 540 

    22.6.3 变量 540 

    22.6.4 正则表达式 541 

    22.6.5 请求处理 542 

    22.6.6 请求转发 544 

    22.6.7 子请求 545 

    22.6.8 定时器 546 

    22.6.9 共享内存 546 

    22.7 开发示例 547 

    22.7.1 content handler 548 

    22.7.2 filter 549 

    22.7.3 upstream 550 

    22.7.4 subrequest 550 

    22.7.5 discard 551 

    22.7.6 echo 552 

    22.8 总结 552 

    第23章 Nginx调试与测试 554 

    23.1 调试 554 

    23.1.1 调试器 554 

    23.1.2 调试断点 555 

    23.1.3 调试日志 556 

    23.2 功能测试 558 

    23.2.1 测试套件 559 

    23.2.2 测试用例 559 

    23.2.3 运行测试 564 

    23.3 性能测试 564 

    23.3.1 ab 565 

    23.3.2 http_load 565 

    23.3.3 wrk 566 

    23.3.4 Test::Nginx 567 

    23.4 总结 568 

    第24章 Nginx性能分析 569 

    24.1 简介 569 

    24.2 火焰图 570 

    24.3 分析工具 572 

    24.3.1 使用方式 572 

    24.3.2 处理数据 573 

    24.4 动态追踪 576 

    24.4.1 CPU分析 577 

    24.4.2 I/O分析 579 

    24.4.3 Memory分析 580 

    24.4.4 观测工具 581 

    24.5 总结 582 

    第25章 结束语 583 

    25.1 本书的遗憾 583 

    25.2 下一步 583 

    25.3 临别赠言 584 

    附录A 推荐书目 585 

    附录B 字符串格式化 587 

    附录C 开发辅助工具 589
查看详情
相关图书 / 更多
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx应用与运维实战
王小东
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx经典实例
[美]德里克 德琼格(Derek DeJonghe)
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx底层设计与源码分析
聂松松;赵禹;施洪宝
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx实战:基于Lua语言的配置、开发与架构详解
王力 著
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx模块开发指南:使用C++11和Boost程序库
罗剑锋 著
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx高性能Web服务器实战教程
黑马程序员 著
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx Lua开发实战
李明江 著
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx完全开发指南:使用C、C++和OpenResty
罗剑锋 作者
Nginx完全开发指南:使用C、C++、JavaScript和Lua
Nginx高性能Web服务器应用与实战(微课版)
千锋教育高教产品研发部