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. Java负数的位运算

    /** * 求负数的位运算 *///1. -10 >> 2 = ?//2. -10的原码: 1000 0000 0000 0000 0000 0000 0000 1010 最高位代表符号位 ...

  2. Flask中的后端并发思考(以Mysql:too many connections为例)

    之前写过一篇<CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目>,最近对该工程的功能进行了完善,基本的功能单元测试也做了. 觉得也是时候进行一下压力 ...

  3. CV codes代码分类整理合集 《转》

    from:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction:   SIFT [1] [Demo program] ...

  4. webpack 打包和手动创建一个vue的项目

    首先我们为啥要用webpack,为啥不用其他的打包的工具. 先听我捋捋, Webpack有人也称之为 模块打包机 ,由此也可以看出Webpack更侧重于模块打包,当然我们可以把开发中的所有资源(图片. ...

  5. 已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)

    对此题目的完整示例可直接运行代码如下: #include <stdio.h> #include <stdlib.h> typedef struct LNode{ int dat ...

  6. VLAN-7-VTP处理及修订版本号

    在VTPv1和VTPv2中,更新的过程开始于:交换机管理员在一台VTP服务器交换机上添加.删除或更新VLAN.当新的配置出现时,VTP服务器将旧的VTP修订版本号加1,并通告完整的VLAN配置数据库以 ...

  7. C# 线程同步计数存在的问题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. ES6新特性使用小结(六)

    十三.promise 异步编程 ①.使用 promise 模拟异步操作 { //ES5 中的 callback 解决 异步操作问题 let ajax = function (callback) { c ...

  9. csrf攻击实例

    CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作.比如说,受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 ht ...

  10. zip (ICSharpCode.SharpZipLib.dll文件需要下载)

    ZipClass zc=new ZipClass (); zc.ZipDir(@"E:\1\新建文件夹", @"E:\1\新建文件夹.zip", 1);//压缩 ...