• 模块化结构
  • 什么是模块化结构
  • 模块化设计支持分布式开发;
  • 模块化设计支持团队协同合作;
  • 模块化设计支持应用扩展和升级;
  • Nginx 模块化结构
  • Nginx 模块分为:核心模块、标准模块、HTTP 模块,可选 HTTP 模块、邮件服务模块及第三方模块五大类。
  • 核心模块
  • 核心模块为 Nginx 运行时必不可少的模块,为 Nginx 提供了最基本最核心的服务。
  • 在编译后的 objs 目录中包含了核心模块和标准 HTTP 模块,在此目录的 ngx_modules.c文件中包含了此版本快速编译后包括所有固有模块的声明
  • 核心模块主要包含两类功能,一类是主体功能,包括进程管理,权限控制,错误日志记录,配置解析等。另外一类是用于响应请求事件必须的功能,包括事件驱动机制,正则表达式等。
  • 标准 http 模块

在服务器上找到nginx 服务器 nginx_在服务器上找到nginx


  • 可选 HTTP 模块
  • 邮件服务模块
  • 第三方模块
  • Nginx 服务器的 web 请求处理机制。
  • 多进程处理方式
  • 多进程方式指:服务器每当接收到一个客户端时,就有服务器主进程生成一个子进程出来和该客户建立连接进行交互,知道连接断开。
  • 优点:设计和实现相对简单,各个子进程之间相互独立。请求过程彼此不受干扰,互不影响。
  • 缺点:生成一个子进程时需要进行内存复制等操作,资源和时间上产生额外的开销,对系统资源造成压力。性能下降。
  • 多线程方式
  • 服务器每当接受到一个客户端时,会由服务器主进程派生一个线程出来和该客户端进行交互。
  • 优点:由于系统产生一个线程的开销远远小于产生一个进程的开销,减轻了 web服务器对系统资源的要求。
  • 缺点:多个线程位于同一个进程内,可以访问彼此的内存空间,彼此之间相互影响,开发过程中需要开发者自己对内存管理,增加出错的风险。
  • 异步方式
  • 同步机制:发送方发送请求后,需要等待接受方发回的响应后,才接着发送下个请求。
  • 异步机制:发送一个请求后,不等接收方回应,就继续发送下一个请求。
  • 阻塞:Socket 的阻塞调用方式为,调用结果返回之前,当前线程从运行状态被挂起,一致等到调用结果返回之后才进入就绪状态
  • 非阻塞,如果调用结果不能马上返回,当前线程不会被挂起,而是执行下一个调用。
  • 异步非阻塞方式:发送方向接受方发送请求后,不用等待响应,可以继续其他工作,接收方处理请求时进行的 IO 操作如果不能马上得到结果,也不等待,而是马上去做其他事情。
  • Nginx 如何处理请求.
  • Nginx 结合多进程机制与异步非阻塞方式对外提供服务。
  • 优势:不增长对系统资源的压力,不降低对请求的处理能力。
  • Nginx 服务器的事件处理机制
  • IO调用在完成后主动通知工作进程
  • select/poll/epoll/kqueue 等这样的调用,称为事件驱动模型
  • Nginx 的事件驱动模型.
  • 事件驱动模型的基本单元
  • 事件收集器:负责收集所有的事件
  • 事件发送器:负责将收集到的事件发送到目标对象中
  • 事件处理器:负责具体事件的响应工作
  • Nginx 设计架构概览
  • Nginx服务器的进程.
  • 三大类进程:主进程,工作进程,缓存索引进程.
  • 主进程
  • 读取 Nginx 配置文件并校验其正确性
  • 建立,绑定,和关闭 Socket。
  • 按照配置生成、管理和结束工作进程。
  • 接受外界指令,比如重启,升级及退出服务器指令。
  • 不中断服务,实现平滑重启、应用新配置。
  • 不中断服务,实现平滑升级,升级失败进行回滚处理。
  • 开启日志文件,获取文件描述符。
  • 编译和处理 Perl 脚本。
  • 工作进程
  • 接收客户端请求
  • 将请求依次送入各个功能模块进行过滤处理
  • IO调用
  • 与后端服务进行通讯,接收后端服务器处理结果
  • 数据缓存,访问缓存索引,查询和调用缓存数据。
  • 发送请求结果,相应客户端请求。
  • 接收主程序指令,比如重启、升级、和退出。
  • 缓存索引重建及管理进程。
  • 缓存索引重建:根据本地磁盘上的缓存文件在内存中建立索引元数据。
  • 缓存索引管理进程:主要负责在索引元数据更新完成后,对元数据是否过期做出判断
  • 进程交互
  • Nginx 在使用 master-Worker 模型时,会涉及到主进程与工作进程之间的交互,工作进程间的交互。依赖于管道机制