专栏首页Java职业技术分享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进程
  • 管理磁盘的缓存大小,超过预定值大小后最少使用数据将被删除

框架模型:

框架模型流程:

框架模型流程:

核心流程图:

核心流程图:

http请求流程:

Upstream设计:

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

upstream流程:

4. Nginx定制化模块开发

Nginx的模块化设计特点:

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

核心模块:

handler模块:

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

filter模块:

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

upstream模块:

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

load_balance:

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

ngx_lua模块:

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

以上是个人对Nginx的一下见解,对Java感兴趣的在这里给大家免费分享一波福利,都是视频资料,里面就包涵了Java高并发、分布式、微服务、高性能、源码分析、JVM等技术资料

感兴趣的加秋秋群:856443934【免费】获取!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java晋级之路--如何成为高级工程师

    我虽然是软件工程专业,但是大学没学到啥东西,算是零基础了。找工作那会,就找了个培训班,简单学了下,极度勉强的情况下算是入门了。于是在北京开始寻找生涯中的第一份工...

    Java知音
  • Java纯干货——poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中。

    Java知音
  • 好嗨呦,感觉人生达到了高潮,带你达到架构师巅峰

    高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

    Java知音
  • Nginx技术总结之一——Nginx模块与工作原理

    Nginx 由内核和模块组成。其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block(l...

    剑影啸清寒
  • Nginx服务器的简明架构

    Nginx模块介绍 Nginx内部由核心模块和其他功能模块组成。这种简单的结构分层,便于进行功能的扩展,也代码更加清晰易于维护。我们通常将其分为五大模块:核心模...

    企鹅号小编
  • 最简单的匿名方法与委托示例

    using System; namespace ConsoleApplication1 {     class Program     {    ...

    菩提树下的杨过
  • sublime text 3 生成并安装

    1、打开网址http://tmtheme-editor.herokuapp.com/#!/editor/local/Monokai

    py3study
  • 软件推荐(SpaceSniffer) -- 磁盘空间分析工具

    今天是软件专场的倒数第87场,跟大家分享的是可以查看硬盘中文件和文件夹的分布情况的软件--SpaceSniffer。简单地说就是例如你想知道你的C盘里的东西的分...

    丰臣正一
  • 逆波兰表达式

  • 1739 GPA排序 个人博客:doubleq.win

    个人博客:doubleq.win 1739 GPA排序  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解 题目描...

    attack

扫码关注云+社区

领取腾讯云代金券