个人觉得要真正理解源码,如果 只停留在理论是远远不够,所以从现在起,要开始学习自己开发Nginx模块,再反过来理解Nginx本身代码。
Nginx 发送文件或转发 请求到其他服务器,有处理模块处理,但需要压缩或在服务端添加一些东西时,可以采用过滤模块,还是有一些核心模块主要负责管理网络层和应用层的 协议。如果处理模块把请求反向代理到后端的服务器,就变成另外一类的模块:负载均衡模块。负载均衡模块的配置中有一组后端服务器,当一个HTTP请求过来时,它决定哪台服务器应当获得这个请求。Nginx的负载均衡模块默认采用两种方法:轮转法,它处理请求的方式就像纸牌游戏一样从头到尾分发;IP哈希法,在众多请求的情况下,它确保来自同一个IP的请求会分发到相同的后端服务器。
每个过滤模块不会等上一个过滤模块全部完成;它能把前一个过滤模块的输出作为其处理内容;有点像 Unix 中的流水线。
过滤模块能以 buffer(缓冲区)为单位进行操作,这些 buffer 一般都是一页(4K)大小,当然你也可以在 nginx.conf 文件中进行配置。这意味着,比如模块可以压缩来自后端服务器的回复,然后像流一样的到达客户端,直到整个回复发送完成。
函数可在以下时段执行某些功能:
• 当服务读配置文件之前
• 读存在 location 和 server 或其他任何部分的每一个配置指令
• 当 Nginx 初始化全局部分的配置时
• 当 Nginx 初始化主机部分(比如主机/端口)的配置时
• 当 Nginx 将全局部分的配置与主机部分的配置合并的时候
• 当 Nginx 初始化位置部分配置的时候
• 当 Nginx 将其上层主机配置与位置部分配置合并的时候
• 当 Nginx 的主(master)进程开始的时候
• 当一个新的工作进程(worker)开始的时候
• 当一个工作进程退出的时候
• 当主进程退出的时候
• 处理请求
• 过滤回复的头部
• 过滤回复的主体
• 选择一台后端服务器
• 初始化到后端服务器的请求
• 重新初始化到后端的服务器的请求
• 处理来自后端服务器的回复
• 完成与后端服务器的交互
小结
以上内容是参考Emiller 的 Nginx 模块开发指南,我觉得现在很多 网上已经偏离 了开源的精神,把一些资源变相用积分之类获得,所以 个人决定要贡献 一份力量 ,我会将自己看到的好资料都免费开放给大家下载。