ChsModulesGuide

Emiller的模块开发指南

作者：Evan Miller 草稿: July 14, 2008 (changes)

译者：YaoWeibin 草稿：Sep 20，2008

全文下载 的Nginx模块开发心得.doc


 * 目录

0. 预备知识... 1

1. Nginx模块任务委派的主要轮廓... 1

2. Nginx模块的组成... 3

2.1. 模块的配置结构体... 3

2.2. 模块的指令... 3

2.3. 模块的上下文... 6

2.3.1. create_loc_conf 7

2.3.2. merge_loc_conf 8

2.4. 模块定义... 9

2.5. 模块注册... 9

2.5.1.处理模块的注册... 10

2.5.2. 过滤模块的注册... 10

3. 处理模块、过滤模块和 负载均衡模块... 11

3.1. 剖析处理模块(非代理) 12

3.1.1. 获得位置配置结构体... 12

3.1.2. 产生回复... 12

3.1.3. 发送HTTP头部... 13

3.1.4. 发送HTTP负载... 14

3.2. 上游模块剖析（又称代理模块）... 15

3.2.1.代理模块回调函数的概要... 16

3.2.2. create_request 回调函数... 17

3.2.3. process_header 回调函数... 18

3.2.4. 状态保持... 19

3.3. 剖析头部过滤函数... 20

3.4. 剖析负载过滤函数... 21

3.5. 剖析负载均衡模块... 22

3.5.1.激活指令... 23

3.5.2.注册函数... 23

3.5.3.上游主机初始化函数... 25

3.5.4.同伴初始化函数... 26

3.5.5.负载均衡函数... 28

3.5.6. 同伴释放函数... 29

4. Advanced Topics. 30

4.1. Shared Memory. 30

4.1.1. A (fore)word of caution. 31

4.1.2. Creating and using a shared memory segment 31

4.1.3. Using the slab allocator. 33

4.1.4. Spinlocks, atomic memory access. 34

4.1.5. Using rbtrees. 35

4.2. Subrequests. 36

4.2.1. Internal redirects. 36

4.2.2. A single subrequest 36

4.2.3. Sequential subrequests. 38

4.2.4. Parallel subrequests. 40

4.3. TODO: Advanced Topics Not Yet Covered Here. 40

5. Writing and Compiling a New Nginx Module. 41

Appendix A: Code References. 42

Appendix B: Changelog. 42


 * 翻译说明：

在Nginx的模块编写过程中，时常苦于文档的不足，而源代码中又没多少注释. 感谢Emiller的这篇英文文档带我入门. 这次我翻译的是一至三章，希望能给中国广大Nginxer能有帮助，对于一般的应用来说，前三章的内容就足够了. 如果时间够的话，我可能也会翻译第四章.

由于英语水平一般，接触Nginx时间不多，翻译中碰到的错误在所难免，如果您觉得哪里翻译得不对，请跟我联系：yaoweibin2008 AT 163 DOT com


 * 翻译词汇对照表：

Backend：后端备选服务器.

Buffer：缓冲区.

Callback：回调函数，一般来说是将某个回调函数赋值给某个函数指针

CHAIN OF RESPONSIBILITY：接力链表.

Filter：过滤模块/函数，模块和函数的概念似乎有点模糊不清.

Handler: 处理模块/函数，另外也有指向具体的处理函数的指针或句柄的意思.

Installation：愿意为安装，我觉得还是译作注册好点.

Load-balancer：负载均衡模块/函数.

Location：指URL位置，比如http://****/photo/中的“/photo”目录.

Master：主进程，由主进程产生worker进程，同时也可以而监视worker进程的动态，worker因为异常而退出出的时候也可以重启一个新的worker进程.

Reference：一般译作“引用”，不过很多时候，似乎还不如称作“指针”来的直接些.

Request：HTTP 请求.

Response：HTTP 回复.

Server-side：服务端.

Upstream：上游服务（器），有时亦称backend.

Worker：工作进程，模块真正发挥作用的地方.