首页 > 系统相关 >nginx reload时对http keepalive连接的处理

nginx reload时对http keepalive连接的处理

时间:2024-12-13 18:35:34浏览次数:7  
标签:http nginx reload close ngx 连接 keepalive

现象

nginx 在reload时,会对http keepalive的连接进行close操作。

抓包可以看见client收到了一个fin报文。

 nginx 的worker也不会长时间留着shutdown状态,而是立刻退出。

 

4层的tcp监听上的连接,会使worker一直保留在shutdown状态。直到连接断开后,进程退出。

代码分析

见函数:ngx_worker_process_cycle,

所有idle的连接,会调用一次read的handler,然后将连接标记为close,最后在处理流程里根据这个标记,调用ngx_http_close_connection。关闭连接。

 

http keepalive过程

keepalive的连接会在每个request处理完的时候ngx_http_finalize_request调用连接关闭ngx_http_finalize_connection

在这个函数里,如果连接设了keepalive,就会进入 ngx_http_set_keepalive 函数

 

上述调用ngx_http_set_keepalive 函数的过程干三个事:

1 rev->handler = ngx_http_keepalive_handler;

2 c->idle = 1;

3 在2936行直接返回,跳过后面的connection close操作,所以连接还开着。

 

当 nginx reload的时候,2930或2931导致  ngx_http_set_keepalive 不会被调用,所以连接被关闭了,

抓包就看见了一个nginx到client的fin报文。

 

最后在函数ngx_worker_process_cycle,里。所有连接都关闭了,于是进程退出。

 

另外有个配置叫 worker_shutdown_timeout

https://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout

就是到时间之后,不管什么连接(包括tcp)全部断开进程退出,实现如下:将所有连接全部标记为close,然后再handler流程里close。

 

connection close的时候,会删掉read write timer,所有(三)里边的exit逻辑分支,再所有连接都断开了以后,就使进程退出了。

 

参考

https://github.com/alibaba/tengine/issues/1074

 

标签:http,nginx,reload,close,ngx,连接,keepalive
From: https://www.cnblogs.com/hugetong/p/18605553

相关文章

  • nginx-docker.yml
    version:'3'services:nginx:image:nginx:latestcontainer_name:nginx1restart:alwaysports:-"80:80"-"7080:7080"-"1180:1180"volumes:-/usr/local/nginx/html:/usr/share/ng......
  • CS61B srping 2018 examprep03 https://sp18.datastructur.es/
    flatten方法接受二维数组,返回一个一维数组比如,flatten({{1,2,3},{},{7,8}})shouldreturn{1,2,3,7,8}补全下面的程序片段publicstaticint[]flatten(int[][]x){inttotalLength=0;for(____________________________________){_______________________......
  • C#上传文件 HttpWebRequest改为HttpClient
    1、先声明HttpClient是.net4.5及其以后的版本中引入的,要使用的话必须是4.5及之后的版本才行。2、原因再说下我为什么要把原始的HttpWebRequest改为HttpClient的原因,内存问题,是的,用HttpWebRequest上传文件,就如果100M的文件,2,3次就能把内存干爆,不知道为啥HttpWebRequest方法......
  • Net Core Cookie 、Net Framework cookie IHttpContextAccessor HttpContextAccessor
    NetEntityFrameworkCookieNetCoreCookieOptionsoption=newCookieOptions();option.Expires=DateTime.Now.AddMilliseconds(10);Response.Cookies.Append(key,value,option);IHttpContextAccessorHttpContextAccessorCORECOOKIE进行封装nam......
  • optimized dependencies changed. reloading
    当您在使用vite+vue3+element-plus开发项目时,是否也遇到过控制台提示:optimizeddependencieschanged.reloading,然后整个应用重新被编译,新打开一个页面好慢好慢的情况。 14:27:31[vite]✨newdependenciesoptimized:element-plus/es/components/table-column/style......
  • CloseableHttpAsyncClient使用代理问题记录
    目录场景背景问题解决过程解决方案总结场景背景项目A部署到现场后,甲方要求调用接口上传某些数据给他们。问题代码很快就开发完成了,但是领导要求必须想办法调用一次测试一次,而且现场没有测试环境(测试当生产用),只能本地使用VPN然后再调用接口测试。VPN本身很多坑就不说了,后面VP......
  • httpsok-v1.18.0-SSL证书自动续期
    ......
  • HTTPS加密认证过程详细理解
    简单来说HTTPS也就是在HTTP基础上加上了SSL/TLS,SSL是TLS的前身,在建立TCP三次握手后,建立SSL/TLS四次握手,也是主要的加密认证过程。1、首先客户端先向服务端打招呼,并发送自己支持的TLS版本,选择的加密套件(支持的加密算法列表),以及随机生成的第1个随机数。对应12、接着服务端也......
  • Https&身份鉴权(小迪网络安全笔记~
    附:完整笔记目录~ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正!5.2Https&身份鉴权引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。Https概述由于Http报文在通信链路中明文传输,因此一旦报文被截获,任何人都可查看更改Http报文......
  • 中高级运维工程师运维面试题(二)之NGINX
    这里写目录标题前言基础知识1.什么是NGINX?2.NGINX的基本架构是怎样的?3.如何配置NGINX以支持HTTPS?高级配置4.如何配置NGINX的负载均衡?5.如何实现URL重写和重定向?6.如何配置NGINX的缓存?性能优化7.如何优化NGINX的并发性能?安全性8.如何保护NGINX......