作者:ningg

来源:ningg.top/nginx-series-principle/

一、Nginx 的进程模型

Nginx 服务器,正常运行过程中:

  • 多进程:一个 Master 进程、多个 Worker 进程
  • Master 进程:管理 Worker 进程
  • 对外接口:接收外部的操作(信号)
  • 对内转发:根据外部的操作的不同,通过信号管理 Worker
  • 监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
  • Worker 进程:所有 Worker 进程都是平等的
  • 实际处理:网络请求,由 Worker 进程处理;
  • Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。

思考:

  1. 请求是连接到 Nginx,Master 进程负责处理和转发?
  2. 如何选定哪个 Worker 进程处理请求?请求的处理结果,是否还要经过 Master 进程?

二、HTTP 连接建立和请求处理过程:

  • Nginx 启动时,Master 进程,加载配置文件

  • Master 进程,初始化监听的 socket

  • Master 进程,fork 出多个 Worker 进程

  • Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求

Nginx 高性能、高并发:

  • Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)

  • 请求的完整过程:

  • 建立连接

  • 读取请求:解析请求

  • 处理请求

  • 响应请求

  • 请求的完整过程,对应到底层,就是:读写 socket 事件

Nginx 的事件处理模型

request:Nginx 中 http 请求。

基本的 HTTP Web Server 工作模式:
  • 接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体

  • 处理请求

  • 返回响应:根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)

Nginx 也是这个套路,整体流程一致。

三、模块化体系结构

nginx的模块根据其功能基本上可以分为以下几种类型:
  • event module: 搭建了独立于操作系统的事件处理机制的框架,及提供了各具体事件的处理。包括ngx_events_module, ngx_event_core_module和ngx_epoll_module等。nginx具体使用何种事件处理模块,这依赖于具体的操作系统和编译选项。

  • phase handler: 此类型的模块也被直接称为handler模块。主要负责处理客户端请求并产生待响应内容,比如ngx_http_static_module模块,负责客户端的静态页面请求处理并将对应的磁盘文件准备为响应内容输出。

  • output filter: 也称为filter模块,主要是负责对输出的内容进行处理,可以对输出进行修改。例如,可以实现对输出的所有html页面增加预定义的footbar一类的工作,或者对输出的图片的URL进行替换之类的工作。

  • upstream: upstream模块实现反向代理的功能,将真正的请求转发到后端服务器上,并从后端服务器上读取响应,发回客户端。upstream模块是一种特殊的handler,只不过响应内容不是真正由自己产生的,而是从后端服务器上读取的。

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

正文结束

推荐阅读 ↓↓↓

1.

2.

3.

4.

5.

6.

7.

8.

一个人学习、工作很迷茫?

点击「」加入我们的小圈子!

Nginx核心原理揭秘:Nginx为什么高效?相关推荐

  1. nginx转发请求_Nginx为什么高效?一文搞明白Nginx核心原理

    Nginx 的进程模型 Nginx 服务器,正常运行过程中: 多进程:一个 Master 进程.多个 Worker 进程 Master 进程:管理 Worker 进程 对外接口:接收外部的操作(信号) ...

  2. Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器 ...

  3. windows nginx c++读取请求数据_震撼!全网第一张源码分析全景图揭秘Nginx

    不管是C/C++技术栈,还是PHP,Java技术栈,从事后端开发的朋友对nginx一定不会陌生. 想要深入学习nginx,阅读源码一定是非常重要的一环,但nginx源码量毕竟还是不算少,一不小心就容易 ...

  4. Nginx 核心模块与配置实践丨Nginx模版开发丨C++后端开发

    Nginx 核心模块与配置实践 概要: Nginx 简介 Nginx 架构说明 Nginx 基础配置与使用 1. Nginx 简介与安装 知识点: Nginx 简介 Nginx 编译与安装 Nginx ...

  5. php万能表单源码_震撼!全网第一张源码分析全景图揭秘Nginx

    不管是C/C++技术栈,还是PHP,Java技术栈,从事后端开发的朋友对nginx一定不会陌生. 想要深入学习nginx,阅读源码一定是非常重要的一环,但nginx源码量毕竟还是不算少,一不小心就容易 ...

  6. 详解 epoll 原理【Redis,Netty,Nginx实现高性能IO的核心原理】

    epoll原理剖析:epoll原理剖析以及reactor模型应用 redis源码分析:redis源码分析及driver现实 Nginx模块开发:Nginx源码从模块开发入手,3个项目弄透nginx模块 ...

  7. 图文详解 epoll 原理【Redis,Netty,Nginx实现高性能IO的核心原理】epoll 详解

    [Redis,Netty,Nginx 等实现高性能IO的核心原理] I/O 输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe).在li ...

  8. 详解Nginx的核心原理

    Nginx的核心原理 本节为大家介绍Nginx的核心原理,包含Reactor模型.Nginx的模块化设计.Nginx的请求处理阶段. 虽然本节的知识有一定的理论深度,但是与另一个有名的Java底层通信 ...

  9. Nginx的核心原理解析

    Nginx 反向代理VS正向代理: 反向代理服务器对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置.客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向 ...

  10. 简历上写精通Nginx/OpenResty详解,Nginx的核心原理应该不过分吧

    Nginx的核心原理 本节为大家介绍Nginx的核心原理,包含Reactor模型.Nginx的模块化设计.Nginx的请求处理阶段. 虽然本节的知识有一定的理论深度,但是与另一个有名的Java底层通信 ...

最新文章

  1. js实现webSocket客户端
  2. 【最好的伪原创工具】特别是你的描述中的关键字布局
  3. Java 约瑟夫环(循环链表解决)
  4. C++ 20发布后,这个老牌编程语言又“真香”了
  5. ORACLE 透明网关访问 MYSQL 表
  6. C++程序设计基础(5)sizeof的使用
  7. shell倒数第三位增加字符_shell中常用的变量处理、字符串操作(之三)
  8. pymysql executemany()函数
  9. 需求分析报告模板(免费)
  10. word中的特殊文本符号
  11. 兴趣学水彩?业余练习也要准备的画画工具看这里
  12. 算法竞赛入门经典(刘汝佳)——代码笔记
  13. 2021年全面攻读人物传记【书单】(持续更新)
  14. 计算机技术考研科目大纲,2017计算机考研大纲:计算机大纲文字完整版
  15. cat 021 解析
  16. CentOs 7切换图形界面
  17. 如何通过ISO安装win7程序
  18. java测试案例_微服务实战测试之Java实例篇
  19. 今年的 WWDC 2017 为我们带来了什么?
  20. 兼容IE浏览器的PrintArea

热门文章

  1. iOS自动打开闪光灯
  2. jsp 判断时间大小
  3. 详解YUV系列(二)--YUV422
  4. ios 图片合成 处理合成模糊 水印 模板图片合成
  5. 解读 Kotlin/Native 技术预览版
  6. 面试 其实就是短时间内展现出你最好的自我
  7. 在eclipse上搭建和运行solr项目
  8. 大数据时代:如何节省存储成本
  9. poj 1961 Period kmp基础
  10. 在没有鼠标或键盘的情况下在 Mac 上如何启用蓝牙?