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. win10在python3.6里安装pycrypto-2.6.1

    简单的一步搞定 下载pycrypto-2.6.1-cp36-cp36m-win_amd64.whl文件,然后pip install即可 链接: https://pan.baidu.com/s/1Awl ...

  2. Caused by: java.util.zip.ZipException: zip file is empty

    1.问题描述:mybranch分支代码和master分支的代码一模一样,mybranch代码部署到服务器上没有任何问题,而master代码部署到服务器上运行不起来. 2.解决办法: (1)登陆服务器启 ...

  3. Prometheus 自动发现

    目录 简介 环境说明 静态配置 重新加载配置文件 基于文件发现配置 重新加载配置文件 添加主机测试 基于DNS的A记录 修改配置文件 重新加载配置文件 基于DNS的SRV记录自动发现 修改配置文件 重 ...

  4. python_网络编程

    网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...

  5. Spring Boot 2.0 学习笔记(一)——JAVA EE简介

    本章内容:JAVA EE>Spring>Spring Boot 一.JAVA EE简介 1.1 Java ee优点:结束了Web开发的技术无序状态,让程序员.架构师用同一种思维去思考如何架 ...

  6. List接口下的集合

    集合框架 List接口下的集合特点: Set接口下的集合特点: 1.都是有序的 1.都是无序的 2.都有下标 2.没有下标 3.都可以重复 3.不可重复(覆盖) List接口下的集合 1.ArrayL ...

  7. 微信小程序——动态修改页面数据(和样式)及参数传递

    1.1.1动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造 ...

  8. Spring Boot 最流行的 16 条实践解读!【华为云技术分享】

    置顶:华为云618大促火热进行中,全场1折起,免费抽主机,消费满额送P30 Pro,点此抢购. Spring Boot是最流行的用于开发微服务的Java框架.在本文中,将与大家分享自2016年以来笔者 ...

  9. 带着canvas去流浪系列之八 碰撞

    [摘要] canvas动画-碰撞仿真 示例代码托管在:http://www.github.com/dashnowords/blogs 经过前面章节相对枯燥的练习,相信你已经能够上手canvas的原生A ...

  10. 开发中遇到的一些bug及解决方案

    一.在使用UIStackView时报“UIStackView before iOS 9.0”.