Emiller的Nginx模块开发指南.docx
《Emiller的Nginx模块开发指南.docx》由会员分享,可在线阅读,更多相关《Emiller的Nginx模块开发指南.docx(39页珍藏版)》请在冰豆网上搜索。
Emiller的Nginx模块开发指南
Emiller的Nginx模块开发指南
作者:
EvanMiller草稿:
2009年8月13日
译者:
姚伟斌草稿:
2009年9月21日
内容目录
0.预备知识....................................................................................................................1
1.Nginx模块任务委派的主要轮廓..............................................................................1
2.Nginx模块的组成.....................................................................................................3
2.1.模块的配置结构体..........................................................................................3
2.2.模块的指令......................................................................................................4
2.3.模块的上下文..................................................................................................6
2.3.1.创建位置结构体(create_loc_conf)..................................................8
2.3.2.初始化结构体(merge_loc_conf)......................................................8
2.4.模块定义..........................................................................................................9
2.5.模块注册........................................................................................................10
3.处理模块、过滤模块和负载均衡模块................................................................10
3.1.剖析处理模块(非代理).................................................................................10
3.1.1.获得位置配置结构体..........................................................................10
3.1.2.产生回复..............................................................................................11
3.1.3.发送HTTP头部....................................................................................12
3.1.4.发送HTTP主体....................................................................................13
3.2.上游模块剖析(又称代理模块)................................................................14
i
3.2.1.代理模块回调函数的概要...................................................................14
3.2.2.create_request回调函数....................................................................16
3.2.3.process_header回调函数...................................................................17
3.2.4.状态保持..............................................................................................18
3.3.处理模块的注册.............................................................................................19
4过滤模块...................................................................................................................19
4.1.剖析头部过滤函数........................................................................................19
4.2.剖析主体过滤函数........................................................................................20
4.3过滤函数的注册.............................................................................................22
5.剖析负载均衡模块..................................................................................................24
5.1.激活指令.........................................................................................................24
5.2.注册函数.........................................................................................................25
5.3.上游主机初始化函数.....................................................................................27
5.4.同伴初始化函数.............................................................................................28
5.5.负载均衡函数.................................................................................................30
5.6.同伴释放函数................................................................................................31
6.完成并编译自定义模块..........................................................................................32
7.高级话题...................................................................................................................33
中文版本修改日志......................................................................................................33
ii
iii
翻译说明:
在nginx的模块编写过程中,时常苦于文档的不足,而源代码中又没多少注
释。
只有Emiller的这篇英文文档带我入门,在自己研读的过程中,就想将其翻
译出来,让其他人能快速的浏览,但是如果你想更深入的进入nginx的代码开发,
最好是多读nginx的代码。
因其内部的代码是经常改变的,所以本文有可能已经
过时。
由于本人英语水平一般,接触Nginx时间不多,翻译中碰到的错误在所难免,
如果您觉得哪里翻译得不对,请跟我联系:
yaoweibin2008@
翻译词汇对照表:
Backend:
后端服务器。
Buffer:
缓冲区。
Callback:
回调函数,一般来说是将某个回调函数赋值给某个函数指针
CHAINOFRESPONSIBILITY:
接力链表。
Context:
上下文,有前后工作环境的意思,主要是前期配置值初始化。
Filter:
过滤模块/函数,模块和函数的概念似乎有点模糊不清。
Handler:
处理模块/函数,另外也有指向具体的处理函数的指针或句柄的意思。
Installation:
原意为安装,我觉得还是译作注册好点。
Load-balancer:
负载均衡模块/函数。
Location:
指目录位置,比如
Master:
主进程,由主进程产生worker进程,同时也可以而监视worker进程的
动态,worker因为异常而退出的时候也可以重启一个新的worker进程。
Reference:
一般译作“引用”,不过很多时候,似乎还不如称作“指针”来的
直接些。
Request:
HTTP服务请求。
Response:
HTTP服务回复。
Server-side:
服务端。
Upstream:
上游服务(器),有时亦称backend。
Worker:
工作进程,模块真正发挥作用的地方。
0.预备知识
对于C语言,你应该十分熟悉,对于结构体和预处理命令应有深入的理解,不
至于见到大量的指针和函数引用就惊慌失措。
如果觉得需要补习,就多看看
K&R(C语言的语法书)。
如果你对于HTTP协议已经有了基本概念,那是很有好处的。
毕竟你正在Web服
务器上做开发。
你应该熟悉Nginx的配置文件。
如果不熟悉,也没关系,这里有一些基本理解:
Nginx配置文件主要分成四部分:
main(全局设置)、server(主