nginx请求处理流程

nginx进程结构

master进程:是作为worker进程管理的

worker进程:处理真正的请求的而master进程则是管控这些进程的工作方式的;缓存是在多个worker进程共享数据的;进程间通信使用共享内存解决的,请求使用的缓存有worker管控的

cache magager进程 :缓存管理

cache loader 进程:缓存载入

nginx设计的哲学理念:为什么多进程而非多线程;因为线程之间是共享同一个进程空间的,当第三方模块出现异常时会导致nginx挂掉,而多进程就不会出现这样的问题

为什么worker进程会很多:因为nginx采用事件驱动的模型,它希望每个worker进程从头到尾占用一颗cpu,往往把worker进程数量配置根worker进程一致以外,还需要把每个worker进程与CPU绑定在一起,这样可以更好使用每个cpu上的CPU缓存,来减少缓存失效命中率。

nginx进程间的信号管理

reload流程

1.向master进程发送HUP信号(reload)

2.maseer 进程校验配置语法是否正确

3.master进程打开新监听的端口

4.master进程用新配置启动worker子进程

5.master进程向老worker子进程发送quit信号

6.老worker进程关闭监听句柄,并处理完当前连接后退出结束进程

热升级完整流程

1.将就的nginx文件缓存新的nginx文件。注意备份,及编译新版本nginx指定的路径要与就版本中一致

2.向master进程发送USR2信号

3.master进程会自己修改PID文件名,加后缀.oldbm

4.master进程用新的NGINX文件启动新的master进程

5.向老master进程发送quit信号,关闭老master进程;但老的master进程会保存下来

6.回滚:向老的master发送HUP,向新master发送QUIT信号

流程图

针对HTTP请求优雅关闭work进程,如果设置了超时时间有一些连接会立即停止

网络收发与nginx的事件对应关系;一个网络连接对应两个事件一个读事件一个写事件

网络传输中的报文

TCP协议与非阻塞接口

nginx事件循环

epoll模型

nginx的工作流程的更多相关文章

  1. Nginx的架构及工作流程

    NGINX是一个免费的,开源的,高性能的HTTP服务器和反向代理,以及IMAP / POP3代理服务器.NGINX以其高性能,稳定性,丰富的功能集,简单的配置和低资源消耗而闻名,也是为解决C10K问题 ...

  2. django+uWSGI+nginx的工作原理流程与部署过程

    django+uWSGI+nginx的工作原理流程与部署过程 一.前言 知识的分享,不应该只是展示出来,还应该解释这样做是为什么... 献给和我一样懵懂中不断汲取知识,进步的人们. 授人与鱼,不如授人 ...

  3. Ribbon的主要组件与工作流程

    一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接 ...

  4. 【转载】Nginx 的工作原理 和优化

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

  5. struts2工作流程

    struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...

  6. SecondaryNameNode的工作流程

    SecondaryNameNode是用来合并fsimage和edits文件来更新NameNode和metadata的. 其工作流程为: 1.secondary通知namenode切换edits文件 2 ...

  7. Storm 中什么是-acker,acker工作流程介绍

    概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...

  8. gitlab工作流程简介

    gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...

  9. Git 工作流程

    Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...

随机推荐

  1. URL辅助方法

    URL辅助方法则负责用来产生url地址,那什么时候需要呢,以输出超链接来说,使用Html.ActionLink()辅助方法一定会产生超链接的a标签,如果只是想单纯的输出asp.net mvc的某个网址 ...

  2. 无法加载MainifestResourceTransformer

    Cannot load implementation hint 'org.apache.maven.plugins.shade.resource.MainifestResourceTransforme ...

  3. 在SQL中直接把查询结果转换为JSON数据

    下面这篇中,已经有准备一些数据: <MS SQL server对象类型type>https://www.cnblogs.com/insus/p/10903916.html 为前端服务,直接 ...

  4. Docker Compose 多容器应用

    Docker Compose是一个用来定义并运行复杂应用程序的工具.用Compose,你可以在一个文件中定义多个容器应用程序,然后只需一条命令就可以完成使其运行所需的所有操作. 一个使用Docker容 ...

  5. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  6. MySQL数据库基础详解(非原创)

    文章大纲 一.数据库简介二.Mysql数据库简介三.Mysql安装与服务启动(Windows版本)四.Mysql图形化工具五.Mysql存储引擎精讲六.Mysql数据类型介绍七.Mysql主要专业名称 ...

  7. DataGridView DataSource INotifyPropertyChanged 避免闪烁的方法

    代码说话: dgvPosition就是需要避免闪烁的DataGridView 主要是加2段代码 1.SetStyle 2.datagridview设置DoubleBuffered属性为True pub ...

  8. Linux常用命令(补充)--其他

    其他1)记录命令历史(1)!! (连续两个”!”),表示执行上一条指令:(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令:(3)!字符串(字 ...

  9. 安装redis服务器

    安装redis服务器 Windows环境下安装: 第一步:下载压缩包(地址:https://github.com/MicrosoftArchive/redis/releases) 第二步:解压并打开 ...

  10. 071 Simplify Path 简化路径

    给定一个文档 (Unix-style) 的完全路径,请进行路径简化.例如,path = "/home/", => "/home"path = " ...