当前位置:首页 > 工业技术
Nginx完全开发指南  使用C、C++和OpenResty
Nginx完全开发指南  使用C、C++和OpenResty

Nginx完全开发指南 使用C、C++和OpenRestyPDF电子书下载

工业技术

  • 电子书积分:18 积分如何计算积分?
  • 作 者:罗剑锋著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2017
  • ISBN:9787121314575
  • 页数:618 页
图书介绍:Nginx是著名的Web服务器,性能优异,运行效率远超传统的Apache、Tomcat,广泛应用于国内外诸多顶级互联网公司。Nginx的一个突出特点是其灵活优秀的模块化架构,可以在不修改核心的前提下增加任意功能,自2004年发布至今,已经拥有百余个官方及非官方的功能模块(如fastcgi、mysql、redis等),使得Nginx成长为了一个近乎”全能”的服务器软件。Nginx以纯C语言实现,开发扩展功能模块也大多使用C语言,但由于C语言固有的过程式特性,编写、调试代码都较麻烦——特别是对于Nginx的初学者。本书深入源码,详细解析了模块体系、处理框架、进程模型、事件机制、线程池等Nginx核心运行机制,并在此基础上讲解如何使用C/C++和Lua语言来开发Nginx模块,充分利用C++和Lua的大量高级特性,让Nginx的模块开发变得更加便捷、轻松和愉快。
《Nginx完全开发指南 使用C、C++和OpenResty》目录

第0章 导读 1

0.1关于本书 1

0.2读者对象 2

0.3读者要求 3

0.4运行环境 4

0.5本书的结构 4

0.6如何阅读本书 7

0.7本书的源码 8

第1章Nginx入门 9

1.1关于Nginx 9

1.1.1历史 10

1.1.2特点 10

1.1.3进程模型 11

1.1.4版本 12

1.2安装Nginx 13

1.2.1准备工作 13

1.2.2快速安装 14

1.2.3运行命令 14

1.2.4验证安装 16

1.2.5定制安装 16

1.3配置Nginx 19

1.3.1配置文件格式 19

1.3.2进程配置 20

1.3.3动态模块配置 22

1.3.4运行日志配置 22

1.3.5 events配置 23

1.3.6 http配置 23

1.3.7 server配置 25

1.3.8 location配置 26

1.3.9 fiile配置 27

1.3.10 upstream配置 27

1.3.11变量 28

1.4总结 30

第2章Nginx开发准备 31

2.1开发环境 31

2.1.1 C+++标准 31

2.1.2 Boost程序库 32

2.2目录结构 32

2.3源码特点 34

2.3.1代码风格 34

2.3.2代码优化 34

2.3.3面向对象思想 34

2.4使用C++ 35

2.4.1实现原则 35

2.4.2代码风格 36

2.4.3编译脚本 36

2.5 C++包装类 38

2.5.1类定义 38

2.5.2构造和析构 39

2.5.3成员函数 40

2.6总结 40

第3章Nginx基础设施 41

3.1头文件 41

3.1.1 Nginx头文件 41

3.1.2 C+++头文件 42

3.2整数类型 42

3.2.1标准整数类型 43

3.2.2自定义整数类型 43

3.2.3无效值 44

3.2.4 C+++封装 44

3.3错误处理 47

3.3.1错误码定义 48

3.3.2 C+++异常 48

3.4内存池 50

3.4.1结构定义 51

3.4.2操作函数 51

3.4.3 C+++封装 52

3.4.4清理机制 54

3.4.5 C+++内存分配器 57

3.5字符串 58

3.5.1结构定义 59

3.5.2操作函数 59

3.5.3 C+++封装 61

3.6时间与日期 64

3.6.1时间结构定义 64

3.6.2时间操作函数 64

3.6.3日期结构定义 65

3.6.4日期操作函数 66

3.6.5 C+++封装时间 67

3.6.6 C+++封装日期 68

3.7运行日志 70

3.7.1结构定义 71

3.7.2操作函数 71

3.7.3 C+++封装 72

3.8总结 74

第4章Nginx高级数据结构 77

4.1动态数组 77

4.1.1结构定义 77

4.1.2操作函数 79

4.1.3 C+++动态数组 79

4.2单向链表 83

4.2.1结构定义 83

4.2.2操作函数 84

4.2.3 C+++迭代器 85

4.2.4 C+++单向链表 87

4.3双端队列 90

4.3.1结构定义 90

4.3.2操作函数 91

4.3.3 C+++节点 93

4.3.4 C+++迭代器 95

4.3.5 C+++双端队列 97

4.4红黑树 101

4.4.1节点结构定义 101

4.4.2树结构定义 102

4.4.3操作函数 103

4.4.4 C+++红黑树 104

4.5缓冲区 108

4.5.1结构定义 108

4.5.2操作函数 110

4.5.3 C+++缓冲区 111

4.6数据块链 113

4.6.1结构定义 114

4.6.2操作函数 114

4.6.3 C+++节点 115

4.6.4 C+++迭代器 117

4.6.5 C+++数据块链 118

4.7键值对 120

4.7.1简单键值对 120

4.7.2散列表键值对 121

4.8总结 121

第5章Nginx开发综述 123

5.1最简单的模块 123

5.1.1模块设计 124

5.1.2配置解析 124

5.1.3处理函数 126

5.1.4模块集成 128

5.1.5编译脚本和命令 129

5.1.6测试验证 130

5.2开发基本流程 131

5.2.1设计 131

5.2.2开发 132

5.2.3编译 133

5.2.4测试验证 133

5.2.5调优 133

5.2.6流程图 133

5.3编译脚本 134

5.3.1运行机制 134

5.3.2使用的变量 135

5.3.3模块脚本 135

5.3.4两种脚本格式 136

5.3.5旧式编译脚本 136

5.4总结 137

第6章Nginx模块体系 139

6.1模块架构 139

6.1.1结构定义 139

6.1.2模块的签名 141

6.1.3模块的种类 142

6.1.4模块的函数指针表 143

6.1.5模块的类图 144

6.1.6模块的组织形式 145

6.1.7模块的初始化 147

6.1.8模块的动态加载 150

6.2配置解析 152

6.2.1结构定义 152

6.2.2配置解析的基本流程 156

6.2.3配置数据的存储模型 157

6.2.4访问配置数据 163

6.2.5确定配置数据的位置 163

6.2.6配置解析函数 165

6.2.7配置数据的合并 166

6.2.8配置指令的类型 167

6.3源码分析 168

6.3.1 ngx_core_module 168

6.3.2 ngx_errlog_ module 171

6.4 C++封装 172

6.4.1 NgxModuleConfiig 172

6.4.2 NgxModule 176

6.4.3 NgxTake 178

6.4.4 NGX MODULE NULL 180

6.5 C++开发模块 180

6.5.1模块的基本组成 180

6.5.2配置信息类 181

6.5.3业务逻辑类 183

6.5.4模块集成类 184

6.5.5实现源文件 186

6.5.6增加更多功能 187

6.6总结 187

第7章NginxHTTP框架综述 191

7.1框架简介 191

7.1.1模块分类 191

7.1.2处理流程 192

7.1.3请求结构体 194

7.1.4请求的处理阶段 195

7.1.5请求的环境数据 197

7.2处理引擎 198

7.2.1函数原型 198

7.2.2处理函数的存储方式 198

7.2.3内容处理函数 199

7.2.4引擎的数据结构 200

7.2.5引擎的初始化 201

7.2.6引擎的运行机制 202

7.2.7日志阶段的处理 205

7.3过滤引擎 205

7.3.1函数原型 206

7.3.2过滤函数链表 206

7.3.3过滤函数的顺序 207

7.3.4过滤链表的运行机制 209

7.3.5请求体过滤 210

7.4源码分析 211

7.4.1 ngx_ http_static_ module 211

7.4.2 ngx_ http_not_ modifiied fiilter_module 212

7.5 C++封装 213

7.5.1 NgxModuleCtx 213

7.5.2 NgxHttpCoreModule 215

7.5.3 NgxFilter 217

7.6总结 219

第8章NginxHTTP请求处理 221

8.1状态码 221

8.2请求结构体 222

8.3请求行 223

8.3.1请求方法 223

8.3.2协议版本号 224

8.3.3资源标识符 224

8.4请求头 225

8.5请求体 226

8.5.1结构定义 226

8.5.2操作函数 227

8.6响应头 227

8.6.1结构定义 228

8.6.2操作函数 228

8.7响应体 229

8.8源码分析 229

8.8.1 ngx_ http_static_ module 230

8.8.2 ngx http_ not_ modifiied fiilter_module 231

8.9 C++封装 232

8.9.1 NgxHeaders 232

8.9.2 NgxRequestBody 235

8.9.3 NgxRequest 236

8.9.4 NgxResponse 238

8.10开发handler模块 241

8.10.1模块设计 241

8.10.2配置信息类 241

8.10.3业务逻辑类 242

8.10.4模块集成类 243

8.10.5实现源文件 245

8.10.6编译脚本 245

8.10.7测试验证 246

8.11开发fiilter模块 246

8.11.1模块设计 246

8.11.2配置信息类 246

8.11.3环境数据类 247

8.11.4业务逻辑类 248

8.11.5模块集成类 251

8.11.6实现源文件 252

8.11.7编译脚本 253

8.11.8测试验证 253

8.12总结 253

第9章NginxHTTP请求转发 255

9.1框架简介 255

9.1.1工作原理 256

9.1.2请求结构体 257

9.1.3上游结构体 258

9.1.4上游配置参数 260

9.2请求转发机制 261

9.2.1回调函数 261

9.2.2初始化 263

9.2.3设置连接参数 264

9.2.4启动连接 265

9.2.5处理数据 265

9.3负载均衡机制 266

9.3.1结构定义 267

9.3.2初始化模块入口 271

9.3.3初始化地址列表 272

9.3.4初始化算法 274

9.3.5执行算法 274

9.4源码分析 275

9.4.1 ngx_http_ memcached_ module 275

9.4.2 ngx httpv upstream_ ip_ hash_module 278

9.5 C++封装 281

9.5.1 NgxUpstream 281

9.5.2 NgxUpstreamHelper 283

9.5.3 NgxHttpUpstreamModule 285

9.5.4 NgxLoadBalance 287

9.6开发upstream模块 288

9.6.1模块设计 288

9.6.2配置信息类 288

9.6.3业务逻辑类 289

9.6.4模块集成类 292

9.6.5实现源文件 293

9.6.6编译脚本 293

9.6.7测试验证 294

9.7开发load-balance模块 294

9.7.1模块设计 294

9.7.2配置信息类 294

9.7.3业务逻辑类 295

9.7.4模块集成类 297

9.7.5实现源文件 298

9.7.6编译脚本 299

9.7.7测试验证 299

9.8总结 299

第10章NginxHTTP子请求 301

10.1子请求简介 301

10.1.1工作原理 302

10.1.2请求结构体 303

10.1.3回调函数 304

10.1.4待处理请求链表 306

10.1.5子请求存储结构 306

10.2子请求运行机制 307

10.2.1创建子请求 307

10.2.2处理引擎 311

10.2.3数据整理 312

10.3 C++封装 314

10.3.1 NgxSubRequestHandler 314

10.3.2 NgxSubRequest 316

10.4数据回传模块 317

10.4.1模块设计 317

10.4.2环境数据类 317

10.4.3业务逻辑类 319

10.4.4模块集成类 321

10.4.5编译脚本 322

10.5在模块里使用子请求 323

10.5.1模块设计 323

10.5.2配置信息类 323

10.5.3业务逻辑类 324

10.5.4测试验证 327

10.6总结 328

第11章Nginx变量 329

11.1结构定义 329

11.1.1变量值 329

11.1.2变量访问对象 330

11.1.3变量的存储 331

11.1.4请求结构体 331

11.2运行机制 332

11.2.1注册变量 333

11.2.2获取变量 333

11.2.3修改变量 334

11.3复杂变量 334

11.3.1结构定义 334

11.3.2运行机制 335

11.4 C++封装 335

11.4.1 NgxVariableValue 336

11.4.2 NgxVariable 337

11.4.3 NgxVarManager 339

11.4.4 NgxVariables 340

11.4.5 NgxComplexValue 340

11.5在模块里使用变量 341

11.5.1添加变量 341

11.5.2读写变量 343

11.6在模块里使用复杂变量 343

11.6.1配置信息类 344

11.6.2业务逻辑类 344

11.6.3模块集成类 344

11.6.4测试验证 344

11.7总结 345

第12章Nginx辅助设施 347

12.1摘要算法 347

12.1.1 MD5 347

12.1.2 SHA-1 348

12.1.3 MurmurHash 349

12.1.4 C+++封装 349

12.2编码和解码 352

12.2.1 CRC校验 352

12.2.2 Base64编码解码 353

12.2.3 URI编码解码 354

12.2.4 HTML和JSON编码 355

12.3正则表达式 356

12.4共享内存 356

12.4.1结构定义 357

12.4.2操作函数 357

12.4.3 C+++共享内存 358

12.5总结 359

第13章Nginx进程机制 361

13.1基本系统调用 361

13.1.1 errno 361

13.1.2 getrlimit 362

13.2进程系统调用 362

13.2.1 getpid 362

13.2.2 fork 363

13.2.3 waitpid 363

13.3信号系统调用 364

13.3.1 kill 364

13.3.2 sigaction 365

13.3.3 sigsuspend 365

13.4结构定义 365

13.4.1 ngx_ cycle t 365

13.4.2 ngx_core_ conf t 366

13.4.3 ngx_process t 367

13.5全局变量 368

13.5.1命令行相关 368

13.5.2操作系统相关 369

13.5.3进程功能相关 369

13.5.4信号功能相关 370

13.6启动过程 370

13.6.1基本流程 370

13.6.2解析命令行 371

13.6.3版本和帮助信息 372

13.6.4初始化cycle 372

13.6.5测试配置 374

13.6.6发送信号 374

13.6.7守护进程化 374

13.6.8启动工作进程 375

13.6.9流程图 376

13.7信号处理 377

13.7.1信号处理函数 377

13.7.2发送信号 378

13.7.3处理信号 378

13.8单进程模式 379

13.8.1 single进程 379

13.8.2 single进程流程图 381

13.9多进程模式 382

13.9.1产生子进程 382

13.9.2 master进程 383

13.9.3 master进程流程图 387

13.9.4 worker进程 388

13.9.5 worker进程流程图 389

13.10总结 390

第14章Nginx事件机制 393

14.1基本系统调用 393

14.1.1 errno 394

14.1.2 ioctl 394

14.1.3 setitimer 394

14.1.4 gettimeofday 395

14.2 socket系统调用 395

14.2.1 socket 396

14.2.2 bind 396

14.2.3 listen 396

14.2.4 accept 396

14.2.5 connect 397

14.2.6 recv 397

14.2.7 send 397

14.2.8 setsockopt 398

14.2.9 close 398

14.2.10函数关系图 398

14.3 epoll系统调用 399

14.3.1 epoll_ create 400

14.3.2 epoll_ctl 400

14.3.3 epoll_ wait 401

14.3.4 LT和ET 401

14.3.5函数关系图 402

14.4结构定义 403

14.4.1 ngx_ event t 403

14.4.2 ngx connection_ t 404

14.4.3 ngx_listening_ t 405

14.4.4 ngx_ cycle t 407

14.4.5 ngx_ os_ io_ t 408

14.4.6 ngx_event_ actions t 411

14.4.7 ngx_posted events 413

14.4.8结构关系图 415

14.5定时器 415

14.5.1红黑树 415

14.5.2操作函数 416

14.5.3超时处理 416

14.6模块体系 419

14.6.1函数指针表 419

14.6.2模块的组织形式 420

14.6.3核心配置 422

14.6.4 epoll模块 423

14.7全局变量 425

14.7.1更新时间相关 425

14.7.2事件机制相关 426

14.7.3负载均衡相关 426

14.7.4统计相关 427

14.8运行机制 427

14.8.1模块初始化 427

14.8.2进程初始化 429

14.8.3基本参数初始化 429

14.8.4 epoll初始化 430

14.8.5连接池初始化 431

14.8.6监听端口初始化 433

14.8.7初始化流程图 434

14.8.8添加事件 435

14.8.9删除事件 439

14.8.10处理事件 440

14.8.11接受连接 444

14.8.12负载均衡 447

14.8.13避免阻塞 452

14.9总结 452

第15章Nginx多线程机制 455

15.1 eventfd系统调用 455

15.2 pthread系统调用 456

15.2.1 pthread_create 456

15.2.2 pthread exit 457

15.3结构定义 457

15.3.1 ngx_thread_ task_ t 457

15.3.2 ngx_thread_pool_queue_t 458

15.3.3 ngx_thread_pool_t 458

15.3.4结构关系图 459

15.4事件通知 460

15.4.1函数接口 460

15.4.2初始化 460

15.4.3发送通知 461

15.4.4处理通知 462

15.5运行机制 463

15.5.1完成任务队列 463

15.5.2创建线程池 463

15.5.3创建任务 464

15.5.4投递任务 465

15.5.5执行任务 466

15.5.6任务完成回调 468

15.5.7销毁线程池 468

15.6在模块里使用多线程 469

15.6.1模块设计 470

15.6.2配置信息类 470

15.6.3业务逻辑类 470

15.6.4测试验证 474

15.7总结 474

第16章Nginx Stream机制 477

16.1模块体系 477

16.1.1函数指针表 477

16.1.2基础模块 478

16.1.3核心模块 480

16.1.4结构关系图 481

16.1.5存储模型 482

16.2监听端口 483

16.2.1结构定义 483

16.2.2解析配置 485

16.2.3启动监听 489

16.3处理引擎 491

16.3.1阶段定义 491

16.3.2函数原型 491

16.3.3处理函数的存储方式 492

16.3.4引擎数据结构 492

16.3.5结构关系图 493

16.3.6引擎的初始化 493

16.4过滤引擎 495

16.4.1函数原型 495

16.4.2过滤函数链表 495

16.5运行机制 496

16.5.1会话结构体 496

16.5.2创建会话 497

16.5.3执行引擎 500

16.5.4通用阶段处理 501

16.5.5预读数据 502

16.5.6产生响应数据 506

16.5.7过滤数据 506

16.5.8 结束会话 506

16.6开发stream模块 507

16.6.1 C+++封装 507

16.6.2 discard协议 508

16.6.3 time协议 510

16.6.4 chargen协议 512

16.7总结 514

第17章NginxHTTP机制 517

17.1结构定义 517

17.1.1 ngx_ http_state_e 517

17.1.2 ngx_ http_ connection_t 518

17.1.3 ngx_http_request_ t 518

17.2初始化连接 519

17.2.1建立连接 520

17.2.2等待数据 521

17.2.3读取请求头 524

17.3执行引擎 528

17.3.1初始化引擎 528

17.3.2通用阶段 530

17.3.3改写阶段 531

17.3.4访问控制阶段 532

17.3.5内容产生阶段 533

17.4处理请求体 534

17.4.1丢弃缓冲区数据 535

17.4.2读取并丢弃数据 536

17.4.3读事件处理函数 537

17.4.4启动丢弃处理 538

17.5发送数据 540

17.5.1发送初始化 540

17.5.2事件处理函数 541

17.6结束请求 543

17.6.1释放请求资源 543

17.6.2检查引用计数结束请求 544

17.6.3检查状态结束请求 545

17.6.4综合处理结束请求 546

17.7总结 548

第18章Nginx与设计模式 551

18.1设计模式简介 551

18.2框架级别的模式 551

18.3业务级别的模式 553

18.4代码级别的模式 554

18.5总结 556

第19章OpenResty开发 557

19.1简介 557

19.1.1历史 558

19.1.2版本 559

19.1.3组成 559

19.1.4性能 561

19.1.5安装 562

19.1.6目录结构 563

19.1.7命令行工具 564

19.1.8参考手册 565

19.2 Lua语言 566

19.2.1注释 566

19.2.2数据类型 567

19.2.3变量 568

19.2.4运算 569

19.2.5语句 570

19.2.6函数 572

19.2.7表 574

19.2.8标准库 575

19.2.9模块 576

19.3 LuaJIT 577

19.3.1 continue 578

19.3.2 bit 578

19.3.3 ffii 579

19.4 Lua模块 581

19.4.1指令简介 581

19.4.2配置指令 581

19.4.3功能指令 582

19.4.4指令关系图 584

19.4.5应用开发流程 584

19.5功能接口 585

19.5.1运行日志 585

19.5.2时间与日期 586

19.5.3变量 587

19.5.4正则表达式 587

19.5.5请求处理 588

19.5.6请求转发 590

19.5.7子请求 592

19.5.8 定时器 592

19.5.9共享内存 593

19.6应用实例 594

19.6.1处理请求 594

19.6.2过滤请求 595

19.6.3转发请求 596

19.6.4子请求 597

19.7 Stream Lua模块 598

19.7.1功能接口 598

19.7.2 discard 599

19.7.3 time 599

19.7.4 chargen 600

19.7.5 echo 600

19.8 lua-resty库 601

19.8.1 core 601

19.8.2 cjson 602

19.8.3 redis 603

19.9总结 603

第20章 结束语 605

20.1本书的遗憾 605

20.2下一步 605

20.3临别赠言 606

附录A推荐书目 607

附录B GDB调试简介 609

附录C Nginx C++模块简介 611

附录D Nginx的字符串格式化 613

附录E nginScript简介 615

返回顶部