Nginx核心流程及模块介绍
Posted chentao144
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx核心流程及模块介绍相关的知识,希望对你有一定的参考价值。
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进程
- 管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除
框架模型:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-0bf59b45444dc96e.png?imageMogr2/auto-orient/strip|imageView2/2/w/734/format/webp)
image.png
框架模型流程:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-4b658647aa125a1c.png?imageMogr2/auto-orient/strip|imageView2/2/w/505/format/webp)
image.png
框架模型流程:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-fb679fb4e47b2818.png?imageMogr2/auto-orient/strip|imageView2/2/w/700/format/webp)
image.png
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-2ea2ee9bf2895042.png?imageMogr2/auto-orient/strip|imageView2/2/w/859/format/webp)
image.png
核心流程图:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-bc25f127d3fd0d1b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
master初始化流程.png
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-f01d986182c84e82.png?imageMogr2/auto-orient/strip|imageView2/2/w/873/format/webp)
image.png
核心流程图:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-bcd7e52338e84bdd.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
worker进程初始化流程.png
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-b5005a213bef2090.png?imageMogr2/auto-orient/strip|imageView2/2/w/864/format/webp)
image.png
http请求流程:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-39041753c9c77d50.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
HTTP请求流程.png
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-cceca7333bb7f5d9.png?imageMogr2/auto-orient/strip|imageView2/2/w/854/format/webp)
image.png
Upstream设计:
- 访问第三方Server服务器
- 底层HTTP通信非常完善
- 异步非阻塞
- 上下游内存零拷贝,节省内存
- 支持自定义模块开发
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-d8254e0481b8a507.png?imageMogr2/auto-orient/strip|imageView2/2/w/326/format/webp)
image.png
upstream流程:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-dfe91248b0938d74.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
upstream流程.png
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-6bf1a1e1f1ce0001.png?imageMogr2/auto-orient/strip|imageView2/2/w/793/format/webp)
image.png
4. Nginx定制化模块开发
Nginx的模块化设计特点:
- 高度抽象的模块接口
- 模块接口非常简单,具有很高的灵活性
- 配置模块的设计
- 核心模块接口的简单化
- 多层次、多类别的模块设计
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-8cb7b6914b40ed2b.png?imageMogr2/auto-orient/strip|imageView2/2/w/915/format/webp)
image.png
核心模块:
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-7173c5a937548851.png?imageMogr2/auto-orient/strip|imageView2/2/w/749/format/webp)
Nginx核心模块.png
handler模块:
- 接受来自客户端的请求并构建响应头和响应体。
handler.png
filter模块:
-
过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。
filter.png
upstream模块:
-
使nginx跨越单机的限制,完成网络数据的接收、处理和转发,纯异步的访问后端服务。
upstream.png
load_balance:
-
负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。
load_balabce.png
ngx_lua模块:
- 脚本语言
- 内存开销小
- 运行速度快
- 强大的 Lua 协程
- 非阻塞
- 业务逻辑以自然逻辑书写
![技术图片](https://upload-images.jianshu.io/upload_images/2099201-f029d1c935c696d5.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1005/format/webp)
以上是关于Nginx核心流程及模块介绍的主要内容,如果未能解决你的问题,请参考以下文章