温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么实现nginx的原理分析

发布时间:2021-12-03 18:05:20 来源:亿速云 阅读:167 作者:柒染 栏目:云计算

本篇文章为大家展示了怎么实现nginx的原理分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. 了解一下在nginx使用中常见的信号处理

kill -SIGHUP $ngx_master_pid # 相当于nginx -s reload 从新启动新的work进程kill -SIGTERM $ngx_work_pid # 重建指定nginx work进程ID的进程

对于nginx的master进程来说可以接收到的信号:

以下四个信号是可以通过nginx命令与参数实现的

  • TERM,INT 表示立刻停止nginx进程

  • QUIT 表示优雅的停止nginx进程,就是慢慢的停止nginx进程,不要对用户发送立刻结束连接,像tcp的reset复位请求这样的报文

  • HUP 表示重载配置文件

  • USR1表示重新打开日志文件

以下两个信号专门用于进行nginx的热部署的时候使用,但是只能通过linux命令行的kill实现

  • USR2 发送热更新信号

  • WINCH 用于通知下线旧的work进程

当我们在命令行中使用nginx与参数实现对nginx的管理时,实质上就是获取当前nginx运行的pid文件中的pid,然后通过命令行向pid发送对应的信号

  • reload -> HUP

  • Reopen -> USR1

  • stop -> TERM

  • Quit -> QUIT

 

2. nginx在重载配置文件究竟做了什么?

思考优雅的退出和立即退出有什么区别呢?你知道吗?

1. 向master进程发送HUP信号(reload命令)2. master进程校验配置语法是否正确(因此我们在进行reload的时候,不一定非要先执行一个`nginx -t`)3. master进程打开新的监听端口(可能引入了https,监听了443,此时work就会共用打开的端口)4. master进程用新配置启动新的worker子进程5. master进程向老的worker子进程发送Quit信号(在新的版本中nginx添加一个nginx shutdown timeout,这个就是在新老worker子进程同时存在的时候,限制老的worker进程最迟多久退出)6. 老worker进程关闭监听句柄,处理完当前连接后结束进程

怎么实现nginx的原理分析

3. nginx热升级的完整流程是什么样的?

  • 新的worker进程升级出现问题,想要考虑回滚?

  • 老的worker进程一直退不掉?

  • 升级了nginx之后,发现很多预期的功能不能使用,配置报错?

当我们在处理nginx的版本升级或者增加新的扩展模块的时候或多或少的会遇到这些问题,熟悉nginx升级原理很快解决这些问题。

1. 将旧nginx文件换成新的nginx文件(注意备份) 2. 向master进程发送USR2信号3. master进程修改pid文件名,加后缀.oldbin4. master进程用新nginx文件启动新master进程5. 向老master进程发送quit信号,关闭老的master进程6. 回滚: 向老master发送HUP,向新master发送quit

怎么实现nginx的原理分析

4. 如何优雅的关闭nignx的worker进程?

如何优雅的关闭连接呢?worker进程可以识别当前的进程是否正在处理请求,若没有处理请求的时候,就可以将连接进行关闭,但是当nginx代理websocket的协议的时候,是做不到这点的,因为在websocket后端通信的frame帧里面,nginx是不解析的,所以是不能识别的。当nignx代理的是tcp请求的时候,因为无法判断一个请求要经历多少报文才结束,因此也是不能识别进程是否正在处理请求,但是对于Http请求,nginx是可以的。

1. 设置定时器 `worker_shutdown_timeout`,然后给进程设置一个优雅关闭的标志位2. 关闭监听句柄不在接收新的连接3. 关闭空闲连接4. 在循环中等待全部连接关闭5. 退出进程

上述内容就是怎么实现nginx的原理分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI