当前位置: 首页 > news >正文

​​Nginx快速入门-3:工作流程和模块化

1.工作流程

Nginx 在处理客户端请求时,每个连接仅由一个进程进行处理,每个请求仅运行在一个工作流中,工作流被划分为多个阶段(见下图),请求在不同阶段由功能模块进行数据处理,处理结果异常或结束则将结果返回客户端,否则将进入下一阶段。工作进程维护工作流的执行,并通过工作流的状态推动工作流完成请求操作的闭环。 

 

2.模块化

Nginx 一直秉持模块化的理念,其模块化的架构中,除了少量的主流程代码,都是模块。模块代码包括核心模块功能模块两个部分:

  • 核心模块负责维护进程的运行、内存及事件的管理;
  • 功能模块则负责具体功能应用的实现,包括路由分配、内容过滤、网络及磁盘数据读写、代理转发、负载均衡等操作。

① 核心模块(core)

  • 该模块提供了 Nginx 服务运行的基本功能,如 Nginx 的进程管理、CPU 亲缘性、内存管理、配置文件解析、日志等功能。

② 事件模块(event)

  • 该模块负责进行连接处理,提供对不同操作系统的 I/O 网络模型支持和自动根据系统平台选择最有效 I/O 网络模型的方法。

③ HTTP模块(http)

  • 该模块提供 HTTP 处理的核心功能和部分功能模块,HTTP 核心功能维护了 HTTP 多个阶段的工作流,并实现了对各种 HTTP 功能模块的管理和调用。

④ Mail模块(mail)

  • 该模块实现邮件代理功能,代理 IMAP、POP3、SMTP 协议。

⑤ Stream模块(stream)

  • 该模块提供 TCP/UDP 会话的代理和负载相关功能。

⑥ 第三方模块

  • 第三方模块即非 Nginx 官方开发的功能模块,据统计,在开源社区发布的第三方模块已经达到 100 多个,其中 lua-resty、nginx-module-vts 等模块的使用度非常高 

Nginx 早期版本在进行模块编译时,通过编译配置(configure)选项 --with_module 和 --without-module 决定要编译哪些模块,被选择的模块代码与 Nginx 核心代码被编译到同一个 Nginx 二进制文件中,Nginx 文件每次启动时都会加载所有的模块。这是一种静态加载模块的方式。

随着第三方模块的增多和 Nginx Plus 的推出,模块在不重新编译 Nginx 的情况下被动态加载成为迫切的需求。Nginx 从 1.9.11 版本开始支持动态加载模块的功能,该功能使 Nginx 可以在运行时有选择地加载 Nginx 官方或第三方模块。为使动态模块更易于使用,Nginx 官方还提供了 pkg-oss 工具,该工具可为任何动态模块创建可安装的动态模块包。在 Nginx 开源版本的代码中,编译配置选项中含有=dynamic选项,表示支持动态模块加载。

相关文章:

  • day1-小白学习JAVA(mac版)---(jdk安装和环境变量配置)
  • 【Reading Notes】(8.2)Favorite Articles from 2025 February
  • ModbusTCP 转 Profinet 主站网关
  • 从零实现Git安装、使用
  • FairMOT与MCFairMOT算法对比
  • 【web服务_负载均衡Nginx】二、Nginx 核心技术之负载均衡与反向代理
  • c++ static 和 extern 关键字
  • 论文阅读笔记——Mixtral of Experts
  • 期货交易躲过AI捕杀—期货反向跟单策略
  • 51单片机实验四:键盘检测原理及应用实现
  • Linux工具学习之【gcc/g++】
  • 二月公开赛 宝塔搭建Web-ssrfme环境以及漏洞复现
  • 认知,信息技术
  • CSS伪元素
  • C++ 网络层接口设计与实现:基于 Socket 编程
  • IE之路专题11.IS-IS专题
  • 第五章、SpringBoot与消息通信(一)
  • 【Spring Boot】把jar包导入本地系统
  • Java学习手册:Java并发编程最佳实践
  • 代码学习总结(五)
  • 林毅夫:中美经济确有脱钩风险,但“完全脱钩”可能性不大
  • 瑞士成第15届北影节主宾国,6部佳作闪耀“瑞士电影周”
  • 上海这台人形机器人完成半马:无故障、无摔倒,冲过终点不忘挥手致意
  • 冲线!“天工”夺得全球首个人形机器人半马冠军
  • 梅德韦杰夫:如果欧盟和美国 “撒手不管”,俄罗斯会更快解决俄乌冲突
  • “特朗普的欧洲耳语者”:梅洛尼白宫之行真能打破美欧关税僵局?