Nginx 的进程模型

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

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

思考:

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

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

  1. Nginx 启动时,Master 进程,加载配置文件
  2. Master 进程,初始化监听的 socket
  3. Master 进程,fork 出多个 Worker 进程
  4. Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求

Nginx 高性能、高并发:

  1. Nginx 采用:多进程 + 异步非阻塞方式(IO 多路复用 epoll)
  2. 请求的完整过程:
  3. 建立连接
  4. 读取请求:解析请求
  5. 处理请求
  6. 响应请求
  7. 请求的完整过程,对应到底层,就是:读写 socket 事件

Nginx 的事件处理模型

request:Nginx 中 http 请求。

基本的 HTTP Web Server 工作模式:

  1. 接收请求:逐行读取请求行和请求头,判断段有请求体后,读取请求体
  2. 处理请求
  3. 返回响应:根据处理结果,生成相应的 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: 负载均衡模块,实现特定的算法,在众多的后端服务器中,选择一个服务器出来作为某个请求的转发服务器。

转自http://ningg.top/nginx-series-principle/

nginx转发请求_Nginx为什么高效?一文搞明白Nginx核心原理相关推荐

  1. 一文搞明白GIT——Git原理解析与常用命令

    工作中经常用git,但是不少命令经常使用出现各种各样的问题,也不太理解其中的原理.今天专门总结一下git的原理,理解原理之后想实现什么样的功能直接找相应的命令即可.如有错误和不足,欢迎指正! 一. 工 ...

  2. 一文搞明白Python并发编程和并行编程

    目录 前言 一.基础知识 1.并行和并发 (1)定义 (2)联系 2.进程.线程和协程 (1)定义 (2)联系 3.生成器 (1)yield (2)send, next (3)yield from 4 ...

  3. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...

  4. 一文搞懂Nginx如何配置Http、Https、WS、WSS!

    写在前面 当今互联网领域,Nginx是使用最多的代理服务器之一,很多大厂在自己的业务系统中都是用了Nginx作为代理服务器.所以,我们有必要了解下Nginx对于Http.Https.WS.WSS的各项 ...

  5. 一文搞定Nginx的安装与高可用配置

    一.Nginx安装 1.去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本 2.上传nginx到linux系统 3.安装依赖环境 (1)安装gcc环境 yum insta ...

  6. windows 修改nginx端口号_nginx怎么修改端口-linux下修改nginx端口-nginx更改默认端口...

    nginx 修改端口没用 从左边的图片看来 应该是80端口被占用了,所以无法启动nginx,可以使用lsof -i:80查看端口是否被使用. 从右边的图片看,你配置的端口是8083,你将localho ...

  7. 一文搞懂Nginx限流(简单实现)

    Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景.Nginx的限流主要是两种方式:限制访问频率和限制并发连接数. 限流(rate limi ...

  8. php带参数单元测试_一文搞定单元测试核心概念

    基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...

  9. nginx 转发慢_Nginx快速入门之Nginx反向代理与负载均衡

    知乎视频​www.zhihu.com 概念 什么是反向代理其与正向代理有什么区别? 正向代理是指客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客 ...

最新文章

  1. OpenCV 中的三大数据类型( 概述 )
  2. R语言-时间序列-arima模型-forecast、tseries包
  3. 如何将catia装配件附材料_在网上买的快餐桌椅如何安装?餐厅快餐桌椅安装顺序与流程知识...
  4. EF CodeFirst的步骤
  5. JSON——入门语法、对象、数组
  6. ClipDrawable
  7. unity5 人皮渲染 Skin Shading
  8. 频繁分配释放内存导致的性能问题的分析
  9. Pycharm解决plotly不显示离线网页的问题
  10. 逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
  11. Windows xp定时关机命令
  12. 马桶下的压水花技术!!(爆笑)
  13. Excel2010中安装MegaStat插件 MegaStat for Excel2010(2007也适用)
  14. Vue 文档编写指南
  15. 完美的实现九宫格锁屏
  16. html5 足球比赛阵容图,五人足球战术阵型图文全解
  17. Python中的字典该怎么用,看这一篇就够了(结尾有惊喜)
  18. http中Last-Modified 与If-Modified-Since的说明
  19. 计算机网什么是cih病毒,CIH病毒会造成什么样的危害?如何彻底的清除CIH病毒?...
  20. 金属制造业的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. Linux 普通用户之间免密登陆
  2. 《计算机科学导论》一1.1 图灵模型
  3. mysql 学习基础知识汇总
  4. 如何区别一幅图像是否是黑白图像
  5. javascript、jQuery的扩展方法,扩展实例展示代码
  6. 面试八股文最新版出炉!一周肝了15个新篇章……
  7. 谈谈架构的本质和架构分类
  8. 谈谈Tomcat连接器
  9. 一文详解 API 设计最佳实践
  10. 面了小 100 人,90% 都背了面试题......