Nginx核心流程及模块介绍
1. Nginx简介以及特点
Nginx简介:
Nginx (engine x) 是一个高性能的web服务器和反向代理服务器,也是一个IMAP/POP3/SMTP服务器
俄罗斯程序员Igor Sysoev于2002年开始
Nginx是增长最快的Web服务器,市场份额已达33.3%
全球使用量排名第二2011年成立商业公司
Nginx社区分支:
Openresty作者@agentzh(章宜春)开发的,最大特点是引入了ngx_lua模块,支持使用lua开发插件,并且集合了很多丰富的模块,以及lua库。
Tengine主要是淘宝团队开发。特点是融入了因淘宝自身的一些业务带来的新功能。
Nginx官方版本,更新迭代比较快,并且提供免费版本和商业版本。
Nginx源码结构:
代码量大约11万行C代码
源代码目录结构
core (主干和基础设置)
event (事件驱动模型和不同的IO复用模块)
http (HTTP服务器和模块)
mail (邮件代理服务器和模块)
os (操作系统相关的实现)
misc (杂项)
Nginx特点:
反向代理,负载均衡器
高可靠性、单master多worker模式
高可扩展性、高度模块化
非阻塞
事件驱动
低内存消耗
热部署
2. Nginx应用场景
场景如下:
静态文件服务器
反向代理,负载均衡
安全防御
智能路由(企业级灰度测试、地图POI一键切流)
灰度发布
静态化
消息推送
图片实时压缩
防盗链
3. Nginx框架模型及流程介绍
进程组件角色:
master进程
监视工作进程的状态
当工作进程死掉后重启一个新的
处理信号和通知工作进程
worker进程
处理客户端请求
从主进程处获得信号做相应的事情
cache loader进程
加载缓存索引文件信息,然后退出
cache manager进程
管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除
框架模型:
框架模型流程:
框架模型流程:
核心流程图:
核心流程图:
http请求流程:
Upstream设计:
访问第三方Server服务器
底层HTTP通信非常完善
异步非阻塞
上下游内存零拷贝,节省内存
支持自定义模块开发
upstream流程:
4. Nginx定制化模块开发
Nginx的模块化设计特点:
高度抽象的模块接口
模块接口非常简单,具有很高的灵活性
配置模块的设计
核心模块接口的简单化
多层次、多类别的模块设计
核心模块:
handler模块:
接受来自客户端的请求并构建响应头和响应体。
handler.png
filter模块:
过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。
filter.png
upstream模块:
使nginx跨越单机的限制,完成网络数据的接收、处理和转发,纯异步的访问后端服务。
upstream.png
load_balance:
负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。
load_balabce.png
ngx_lua模块:
脚本语言
内存开销小
运行速度快
强大的 Lua 协程
非阻塞
业务逻辑以自然逻辑书写