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进程
    • 管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除

框架模型:

 
image.png

框架模型流程:

 
image.png

框架模型流程:

 
image.png
 
image.png

核心流程图:

 
master初始化流程.png
 
image.png

核心流程图:

 
worker进程初始化流程.png
 
image.png

http请求流程:

 
HTTP请求流程.png
 
image.png

Upstream设计:

  • 访问第三方Server服务器
  • 底层HTTP通信非常完善
  • 异步非阻塞
  • 上下游内存零拷贝,节省内存
  • 支持自定义模块开发
 
image.png

upstream流程:

 
upstream流程.png
 
image.png

4. Nginx定制化模块开发

Nginx的模块化设计特点:

  • 高度抽象的模块接口
  • 模块接口非常简单,具有很高的灵活性
  • 配置模块的设计
  • 核心模块接口的简单化
  • 多层次、多类别的模块设计
 
image.png

核心模块:

 
Nginx核心模块.png

handler模块:

  • 接受来自客户端的请求并构建响应头和响应体。

     
    handler.png

filter模块:

  • 过滤(filter)模块是过滤响应头和内容的模块,可以对回复的头和内容进行处理。它的处理时间在获取回复内容之后,向用户发送响应之前。

     
    filter.png

upstream模块:

  • 使nginx跨越单机的限制,完成网络数据的接收、处理和转发,纯异步的访问后端服务。

     
    upstream.png

load_balance:

  • 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。

     
    load_balabce.png

ngx_lua模块:

  • 脚本语言
  • 内存开销小
  • 运行速度快
  • 强大的 Lua 协程
  • 非阻塞
  • 业务逻辑以自然逻辑书写
 

Nginx核心流程及模块介绍的更多相关文章

  1. 嵌入式系统图形库GUI核心模块介绍

    本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...

  2. nginx 模块介绍

    nginx模块在编译文件下的odjs目录下 cat 查看ngx_modules.c文件 可以看到一些基本extern模块 常用标准模块 1. 性能相关配置 worker_processes numbe ...

  3. 11 . Nginx核心原理讲解

    应用场景优缺点 应用场景 // 1.静态请求 // 2.反向代理 // 3.负载均衡 // 4.资源缓存 // 5.安全防护 // 6.访问限制IP // 7.访问认证 /* 核心主要是以下三个应用: ...

  4. liunx 开机流程与模块管理

    系统开机的经过可以汇整成底下的流程的: 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置: 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub ...

  5. webkit模块介绍

    一.Webkit模块   用到的第三方库如下:   cairo 一个2D绘图库 casqt Unicode处理用的库,从QT中抽取部分代码形成的 expat 一个XML SAX解析器的库 freety ...

  6. nginx+lua的基本原理概念介绍

    一. 概述 Nginx是一个高性能,支持高并发的,轻量级的web服务器.目前,Apache依然web服务器中的老大,但是在全球前1000大的web服务器中,Nginx的份额为22.4%.Nginx采用 ...

  7. Nginx核心配置文件常用参数详解

    Nginx核心配置文件常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于Nginx权威文档的话童鞋们可以参考Nginx官方文档介绍:http://nginx.org/ ...

  8. 第三百二十四节,web爬虫,scrapy模块介绍与使用

    第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...

  9. WebKit由三个模块组成-Webkit模块介绍

    2.       Webkit 源代码由三大模块组成: 1). WebCore, 2). WebKit, 3). JavaScriptCore. WebCore:排版引擎核心,WebCore包含主要以 ...

随机推荐

  1. 王院生:Apache APISIX 微服务网关极致性能架构解析

    2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...

  2. 品优购详情页---产品详细信息区域 iteminfo_wrap

    产品详细信息区域为整个大盒子命名为: iteminfo_wrap 1号盒子命名为:sku_name 2号盒子命名为:news 3号盒子命名为:summary step1:3个盒子搭建框架,以及完成前两 ...

  3. 11-kubernetes RBAC 及授权

    目录 RBAC role 和 clusterrole rolebinding 和 clusterrolebinding 公共权限 clusterrole user 创建测试 创建role案例 创建 r ...

  4. 如何重置IE浏览器

    1.退出所有程序,包括 Internet Explorer.单击“开始”.在“开始搜索”框中键入 inetcpl.cpl 命令,然后按回车键打开“Inetnet 选项”对话框. 2.单击“高级”选项卡 ...

  5. 进入编辑模式、vim命令模式、vim实践

    第4周第5次课(4月13日) 课程内容:5.5 进入编辑模式5.6 vim命令模式5.7 vim实践 5.5 进入编辑模式 所谓编辑模式就是进入到一个可以编辑文本文档的模式,常规的方式就是按小i进入编 ...

  6. 学习spring和spring mvc过程中遇到的一些问题

    以下仅为个人通过网上查找资料总结的内容,如有不对的地方欢迎提出: 注解: @Controller//表明本类是一个Controller @RequestMapping(value="/dem ...

  7. redis与memcached区别

    不同点: (1) redis中并不是所有数据在有效期内只能常驻内存的(如果需要,可定期同步持久化到磁盘),这是和memcached相比一个最大的区别(memcached中的数据在有效期内是以键值对的形 ...

  8. ThreadLocal快速了解一下

    欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 1 引入 在Java8里面,ThreadLocal 是一个泛型类.这个类可以提供线程变量.每个线 ...

  9. 在modelarts上部署mask-rcnn模型

    最近老山完成了对mask-rcnn在modelarts上的部署,部署模型来自于这个项目.部署的过程大体和我的上篇文章使用modelarts部署bert命名实体识别模型相似,许多细节也不在赘述.这篇文章 ...

  10. 2019CCPC秦皇岛 K MUV LUV UNLIMITED(博弈)

    MUV LUV UNLIMITED Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...