图书介绍
Nginx完全开发指南 使用C、C++、JavaScript和LuaPDF|Epub|txt|kindle电子书版本网盘下载
- 罗剑锋著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121364365
- 出版时间:2019
- 标注页数:602页
- 文件大小:162MB
- 文件页数:625页
- 主题词:互联网络-网络服务器-程序设计-指南;C语言-程序设计-指南;JAVA语言-程序设计-指南
PDF下载
下载说明
Nginx完全开发指南 使用C、C++、JavaScript和LuaPDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第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入门9
1.1 关于Nginx9
1.1.1 历史10
1.1.2 特点10
1.1.3 进程模型11
1.1.4 版本13
1.2 安装Nginx13
1.2.1 准备工作14
1.2.2 快速安装14
1.2.3 运行命令15
1.2.4 验证安装16
1.2.5 定制安装17
1.3 配置Nginx19
1.3.1 语法格式20
1.3.2 进程管理21
1.3.3 动态模块23
1.3.4 运行日志23
1.3.5 事件机制23
1.4 HTTP服务24
1.4.1 基本配置25
1.4.2 server配置26
1.4.3 location配置26
1.4.4 file配置28
1.5 TCP/UDP服务28
1.6 反向代理29
1.6.1 上游集群29
1.6.2 负载均衡30
1.6.3 代理转发31
1.7 变量31
1.8 总结33
第2章 Nginx开发准备35
2.1 源码结构35
2.2 源码特点36
2.2.1 代码风格36
2.2.2 代码优化37
2.2.3 面向对象思想37
2.3 头文件38
2.4 总结38
第3章 Nginx基础设施39
3.1 常数39
3.1.1 环境信息39
3.1.2 版本信息40
3.1.3 错误码40
3.2 整数类型41
3.2.1 标准整数类型41
3.2.2 自用整数类型42
3.2.3 无效值42
3.3 内存池44
3.3.1 结构定义44
3.3.2 操作函数45
3.3.3 用法示例46
3.4 字符串46
3.4.1 结构定义46
3.4.2 操作函数47
3.4.3 用法示例50
3.5 时间51
3.5.1 结构定义51
3.5.2 操作函数51
3.5.3 用法示例52
3.6 日期52
3.6.1 结构定义52
3.6.2 操作函数53
3.6.3 用法示例54
3.7 运行日志54
3.7.1 结构定义54
3.7.2 操作函数55
3.7.3 用法示例56
3.8 摘要算法56
3.8.1 Times3357
3.8.2 CRC57
3.8.3 MurmurHash58
3.8.4 MD559
3.8.5 SHA-159
3.9 数据编码60
3.9.1 Base6460
3.9.2 HTML/JSON61
3.10 总结62
第4章 Nginx高级数据结构63
4.1 动态数组63
4.1.1 结构定义64
4.1.2 操作函数65
4.1.3 用法示例66
4.2 单向链表67
4.2.1 结构定义67
4.2.2 操作函数68
4.2.3 用法示例68
4.3 双端队列70
4.3.1 结构定义70
4.3.2 操作函数71
4.3.3 用法示例73
4.4 红黑树74
4.4.1 结构定义75
4.4.2 操作函数77
4.4.3 用法示例78
4.5 缓冲区80
4.5.1 结构定义80
4.5.2 操作函数82
4.5.3 用法示例83
4.6 数据块链84
4.6.1 结构定义84
4.6.2 操作函数85
4.6.3 用法示例85
4.7 总结86
第5章 Nginx开发概述87
5.1 开发示例87
5.1.1 模块设计87
5.1.2 配置解析88
5.1.3 处理函数90
5.1.4 模块集成92
5.1.5 编译脚本93
5.1.6 测试验证94
5.2 开发流程94
5.2.1 设计95
5.2.2 开发95
5.2.3 编译96
5.2.4 测试验证96
5.2.5 调优96
5.2.6 流程图97
5.3 编译脚本97
5.3.1 运行机制98
5.3.2 脚本变量98
5.3.3 添加模块99
5.3.4 脚本格式99
5.3.5 旧式脚本100
5.4 总结101
第6章 Nginx模块体系103
6.1 模块架构103
6.1.1 结构定义103
6.1.2 模块的签名105
6.1.3 模块的种类106
6.1.4 模块的函数指针表107
6.1.5 模块的类图108
6.1.6 模块的组织形式109
6.1.7 模块的静态加载111
6.1.8 模块的动态加载113
6.2 配置解析116
6.2.1 结构定义116
6.2.2 基本流程119
6.2.3 存储模型120
6.2.4 访问配置数据125
6.2.5 配置数据的位置126
6.2.6 配置数据的解析127
6.2.7 配置数据的合并129
6.2.8 配置指令的类型130
6.3 源码分析131
6.3.1 ngx_core_module131
6.3.2 ngx_errlog_module133
6.4 总结135
第7章 Nginx功能框架137
7.1 框架简介137
7.1.1 模块分类137
7.1.2 处理流程138
7.1.3 请求的处理阶段140
7.1.4 请求结构体141
7.1.5 请求的环境数据143
7.2 处理引擎144
7.2.1 函数原型144
7.2.2 处理函数的存储方式144
7.2.3 内容处理函数145
7.2.4 引擎的数据结构146
7.2.5 引擎的初始化147
7.2.6 引擎的运行机制148
7.2.7 日志阶段的处理151
7.3 过滤引擎151
7.3.1 函数原型151
7.3.2 过滤函数链表152
7.3.3 过滤函数的顺序153
7.3.4 过滤链表的运行机制155
7.3.5 请求体过滤156
7.4 源码分析156
7.4.1 ngx_http_static_module157
7.4.2 ngx_http_not_modified_filter_module158
7.5 总结159
第8章 Nginx请求处理161
8.1 状态码161
8.2 请求结构体162
8.3 请求行163
8.3.1 请求方法163
8.3.2 协议版本号164
8.3.3 资源标识符164
8.4 请求头165
8.5 请求体166
8.5.1 结构定义166
8.5.2 操作函数167
8.6 响应头167
8.6.1 结构定义167
8.6.2 操作函数168
8.7 响应体169
8.8 源码分析169
8.8.1 ngx_http_static_module169
8.8.2 ngx_http_not_modified_filter_module171
8.9 开发示例:content handler172
8.9.1 模块设计172
8.9.2 配置数据172
8.9.3 处理函数173
8.9.4 注册函数174
8.9.5 模块集成175
8.9.6 编译脚本176
8.9.7 测试验证176
8.10 开发示例:filter176
8.10.1 模块设计176
8.10.2 配置数据177
8.10.3 环境数据177
8.10.4 注册过滤函数178
8.10.5 过滤响应头178
8.10.6 过滤响应体179
8.10.7 模块集成181
8.10.8 编译脚本182
8.10.9 测试验证182
8.11 总结183
第9章 Nginx请求转发185
9.1 框架简介185
9.1.1 工作原理186
9.1.2 请求结构体187
9.1.3 上游结构体188
9.1.4 上游配置参数189
9.2 请求转发190
9.2.1 回调函数190
9.2.2 初始化192
9.2.3 设置参数193
9.2.4 启动连接194
9.2.5 处理响应头194
9.2.6 处理响应体195
9.3 负载均衡196
9.3.1 结构定义196
9.3.2 初始化模块入口200
9.3.3 初始化地址列表201
9.3.4 初始化算法203
9.3.5 执行算法204
9.4 源码分析204
9.4.1 ngx_http_memcached_module205
9.4.2 ngx_http_upstream_ip_hash_module207
9.5 开发示例:upstream210
9.5.1 模块设计210
9.5.2 配置数据210
9.5.3 上行数据212
9.5.4 下行数据212
9.5.5 启动转发213
9.5.6 注册函数214
9.5.7 模块集成214
9.5.8 编译脚本215
9.5.9 测试验证216
9.6 开发示例:balance216
9.6.1 模块设计216
9.6.2 配置数据216
9.6.3 算法数据结构217
9.6.4 模块入口217
9.6.5 算法实现218
9.6.6 模块集成219
9.6.7 编译脚本220
9.6.8 测试验证220
9.7 总结220
第10章 Nginx子请求223
10.1 框架简介223
10.1.1 工作原理224
10.1.2 请求结构体225
10.1.3 回调函数226
10.1.4 待处理请求链表228
10.1.5 子请求存储结构228
10.2 运行机制228
10.2.1 创建子请求229
10.2.2 处理引擎233
10.2.3 数据整理234
10.3 开发示例235
10.3.1 模块设计236
10.3.2 配置数据236
10.3.3 环境数据236
10.3.4 回调函数236
10.3.5 处理函数237
10.3.6 注册函数238
10.3.7 测试验证239
10.4 总结239
第11章 Nginx变量241
11.1 结构定义241
11.1.1 变量242
11.1.2 复杂变量243
11.1.3 变量的存储244
11.1.4 请求结构体244
11.2 操作变量245
11.2.1 添加变量245
11.2.2 获取变量246
11.2.3 修改变量247
11.2.4 编译复杂变量247
11.2.5 获取复杂变量247
11.3 开发示例:变量248
11.3.1 模块设计248
11.3.2 定义变量248
11.3.3 添加变量249
11.3.4 获取变量249
11.3.5 测试验证250
11.4 开发示例:复杂变量251
11.4.1 模块设计251
11.4.2 定义复杂变量251
11.4.3 编译复杂变量251
11.4.4 获取复杂变量252
11.4.5 测试验证252
11.5 总结252
第12章 Nginx内存管理机制255
12.1 基本系统调用256
12.1.1 malloc256
12.1.2 posix_memalign257
12.1.3 free257
12.2 块式内存池258
12.2.1 结构定义258
12.2.2 常量定义261
12.2.3 创建内存池261
12.2.4 分配内存263
12.2.5 分配大块内存264
12.2.6 分配小块内存265
12.2.7 释放内存270
12.2.8 清理机制270
12.2.9 清空内存池271
12.2.10 销毁内存池272
12.3 页式内存池273
12.3.1 结构定义274
12.3.2 常量定义276
12.3.3 初始化内存池277
12.3.4 分配内存279
12.3.5 分配大块内存281
12.3.6 分配小块内存283
12.3.7 释放内存286
12.4 总结288
第13章 Nginx进程机制291
13.1 基本系统调用291
13.1.1 errno291
13.1.2 getrlimit292
13.2 进程系统调用292
13.2.1 getpid292
13.2.2 fork293
13.2.3 waitpid293
13.3 信号系统调用294
13.3.1 kill294
13.3.2 sigaction295
13.3.3 sigsuspend295
13.4 结构定义295
13.4.1 ngx_cycle_t295
13.4.2 ngx_core_conf_t296
13.4.3 ngx_process_t297
13.5 全局变量298
13.5.1 命令行相关298
13.5.2 操作系统相关299
13.5.3 进程功能相关299
13.5.4 信号功能相关300
13.6 启动过程300
13.6.1 基本流程300
13.6.2 解析命令行301
13.6.3 版本和帮助信息301
13.6.4 初始化cycle301
13.6.5 测试配置303
13.6.6 发送信号304
13.6.7 守护进程化304
13.6.8 启动工作进程305
13.6.9 流程图305
13.7 信号处理306
13.7.1 信号处理函数307
13.7.2 发送信号307
13.7.3 处理信号308
13.8 单进程模式309
13.8.1 single进程309
13.8.2 single进程流程图311
13.9 多进程模式311
13.9.1 产生子进程311
13.9.2 master进程313
13.9.3 master进程流程图316
13.9.4 worker进程317
13.9.5 worker进程流程图319
13.10 总结320
第14章 Nginx进程间通信机制323
14.1 基本系统调用323
14.1.1 atomic323
14.1.2 sched_yield324
14.1.3 semaphore324
14.1.4 mmap325
14.2 共享内存(Ⅰ)325
14.2.1 结构定义325
14.2.2 创建共享内存325
14.2.3 使用共享内存326
14.3 自旋锁326
14.3.1 自旋锁定327
14.3.2 解除锁定328
14.3.3 使用自旋锁328
14.4 互斥锁328
14.4.1 结构定义328
14.4.2 创建互斥锁329
14.4.3 互斥锁定330
14.4.4 解除锁定331
14.4.5 销毁互斥锁332
14.4.6 使用互斥锁332
14.5 读写锁333
14.5.1 写锁定333
14.5.2 读锁定333
14.5.3 解除锁定334
14.5.4 降级锁定334
14.5.5 使用读写锁335
14.6 共享内存(Ⅱ)335
14.6.1 结构定义335
14.6.2 添加共享内存336
14.6.3 创建共享内存337
14.6.4 使用共享内存338
14.7 总结339
第15章 Nginx事件机制341
15.1 基本系统调用341
15.1.1 errno342
15.1.2 ioctl342
15.1.3 setitimer342
15.1.4 gettimeofday342
15.2 socket系统调用343
15.2.1 socket343
15.2.2 bind343
15.2.3 listen344
15.2.4 accept344
15.2.5 connect344
15.2.6 recv344
15.2.7 send345
15.2.8 setsockopt345
15.2.9 close345
15.2.10 函数关系图346
15.3 epoll系统调用346
15.3.1 epoll_create347
15.3.2 epoll_ctl347
15.3.3 epoll_wait348
15.3.4 LT和ET349
15.3.5 函数关系图350
15.4 结构定义350
15.4.1 ngx_event_t350
15.4.2 ngx_connection_t351
15.4.3 ngx_listening_t353
15.4.4 ngx_cycle_t354
15.4.5 ngx_os_io_t355
15.4.6 ngx_event_actions_t359
15.4.7 ngx_posted_events361
15.4.8 关系图362
15.5 定时器362
15.5.1 红黑树362
15.5.2 操作函数363
15.5.3 超时处理363
15.6 模块体系366
15.6.1 函数指针表366
15.6.2 模块的组织形式367
15.6.3 核心配置369
15.6.4 epoll模块370
15.7 全局变量371
15.7.1 更新时间相关371
15.7.2 事件机制相关372
15.7.3 负载均衡相关373
15.7.4 统计相关373
15.8 进程初始化374
15.8.1 初始化函数374
15.8.2 基本参数初始化376
15.8.3 事件机制初始化377
15.8.4 连接池初始化378
15.8.5 监听端口初始化379
15.8.6 初始化流程图381
15.9 运行机制381
15.9.1 添加事件382
15.9.2 删除事件385
15.9.3 处理事件386
15.9.4 接受连接390
15.9.5 负载均衡392
15.10 避免阻塞397
15.11 总结398
第16章 Nginx多线程机制401
16.1 eventfd系统调用401
16.2 pthread系统调用402
16.3 结构定义402
16.3.1 ngx_thread_task_t403
16.3.2 ngx_thread_pool_queue_t403
16.3.3 ngx_thread_pool_t404
16.3.4 结构关系图405
16.4 事件通知405
16.4.1 函数接口405
16.4.2 初始化406
16.4.3 发送通知407
16.4.4 处理通知407
16.5 运行机制408
16.5.1 完成任务队列408
16.5.2 创建线程池408
16.5.3 创建任务409
16.5.4 投递任务410
16.5.5 执行任务411
16.5.6 任务完成回调413
16.5.7 销毁线程池414
16.6 开发示例415
16.6.1 模块设计415
16.6.2 配置数据416
16.6.3 线程任务416
16.6.4 任务完成回调417
16.6.5 投递任务418
16.6.6 测试验证419
16.7 总结419
第17章 Nginx Stream机制421
17.1 模块体系421
17.1.1 函数指针表422
17.1.2 基础模块422
17.1.3 核心模块424
17.1.4 结构关系图425
17.1.5 存储模型425
17.2 监听端口427
17.2.1 结构定义427
17.2.2 解析配置429
17.2.3 启动监听433
17.3 处理引擎434
17.3.1 阶段定义435
17.3.2 函数原型435
17.3.3 处理函数的存储方式435
17.3.4 引擎数据结构436
17.3.5 结构关系图437
17.3.6 引擎的初始化437
17.4 过滤引擎439
17.4.1 函数原型439
17.4.2 过滤函数链表439
17.5 运行机制440
17.5.1 会话结构体440
17.5.2 创建会话441
17.5.3 执行引擎444
17.5.4 通用阶段处理446
17.5.5 预读数据447
17.5.6 产生响应数据451
17.5.7 过滤数据451
17.5.8 结束会话451
17.6 开发示例452
17.6.1 discard协议453
17.6.2 time协议455
17.6.3 echo协议457
17.7 总结459
第18章 Nginx HTTP机制461
18.1 结构定义461
18.1.1 ngx_http_state_e461
18.1.2 ngx_http_connection_t462
18.1.3 ngx_http_request_t462
18.2 初始化连接463
18.2.1 建立连接464
18.2.2 等待数据465
18.2.3 读取请求头467
18.3 执行引擎472
18.3.1 初始化引擎472
18.3.2 通用阶段474
18.3.3 改写阶段475
18.3.4 访问控制阶段476
18.3.5 内容产生阶段478
18.4 处理请求体479
18.4.1 丢弃缓冲区数据479
18.4.2 读取并丢弃数据480
18.4.3 读事件处理函数482
18.4.4 启动丢弃处理483
18.5 发送数据484
18.5.1 发送初始化484
18.5.2 事件处理函数485
18.6 结束请求487
18.6.1 释放请求资源487
18.6.2 检查引用计数结束请求488
18.6.3 检查状态结束请求489
18.6.4 综合处理结束请求490
18.7 总结492
第19章 Nginx与设计模式495
19.1 设计模式简介495
19.2 框架级别的模式495
19.3 业务级别的模式497
19.4 代码级别的模式498
19.5 总结500
第20章 Nginx C++开发501
20.1 语言简介501
20.2 开发准备502
20.2.1 程序库502
20.2.2 头文件502
20.2.3 编程范式503
20.2.4 实现原则503
20.2.5 源码组织504
20.2.6 编译脚本505
20.3 封装类507
20.3.1 基础设施507
20.3.2 高级数据结构510
20.3.3 功能框架515
20.3.4 请求处理519
20.4 开发示例:content handler520
20.4.1 配置信息类520
20.4.2 业务逻辑类521
20.4.3 模块集成类522
20.4.4 实现源文件525
20.5 开发示例:filter525
20.5.1 配置信息类525
20.5.2 环境数据类525
20.5.3 业务逻辑类526
20.5.4 模块集成类528
20.5.5 实现源文件529
20.6 总结529
第21章 Nginx JavaScript开发531
21.1 语言简介531
21.2 模块简介532
21.3 开发准备533
21.4 指令简介533
21.5 功能接口534
21.5.1 运行日志534
21.5.2 变量535
21.5.3 请求处理535
21.5.4 子请求537
21.5.5 定时器537
21.5.6 流处理537
21.6 开发示例538
21.6.1 content handler538
21.6.2 subrequest539
21.6.3 A/B testing540
21.7 总结541
第22章 Nginx Lua开发543
22.1 语言简介543
22.2 模块简介544
22.2.1 http_lua544
22.2.2 stream_lua544
22.2.3 lua-resty-lib545
22.3 开发准备545
22.4 指令简介546
22.4.1 配置指令547
22.4.2 功能指令547
22.4.3 指令关系图549
22.5 应用开发流程549
22.6 功能接口550
22.6.1 运行日志550
22.6.2 时间与日期551
22.6.3 变量551
22.6.4 正则表达式552
22.6.5 请求处理553
22.6.6 请求转发555
22.6.7 子请求556
22.6.8 定时器557
22.6.9 共享内存557
22.7 开发示例558
22.7.1 content handler559
22.7.2 filter560
22.7.3 upstream561
22.7.4 subrequest561
22.7.5 discard562
22.7.6 echo563
22.8 总结563
第23章 Nginx调试与测试565
23.1 调试565
23.1.1 调试器565
23.1.2 调试断点566
23.1.3 调试日志567
23.2 功能测试569
23.2.1 测试套件570
23.2.2 测试用例570
23.2.3 运行测试575
23.3 性能测试575
23.3.1 ab576
23.3.2 http_load576
23.3.3 wrk577
23.3.4 Test::Nginx578
23.4 总结579
第24章 Nginx性能分析581
24.1 简介581
24.2 火焰图582
24.3 分析工具584
24.3.1 使用方式584
24.3.2 处理数据585
24.4 动态追踪588
24.4.1 CPU分析589
24.4.2 I/O分析591
24.4.3 Memory分析592
24.4.4 观测工具593
24.5 总结594
第25章 结束语595
25.1 本书的遗憾595
25.2 下一步595
25.3 临别赠言596
附录A 推荐书目597
附录B 字符串格式化599
附录C 开发辅助工具601