改了配置重载的瞬间,正在传输的请求会不会被直接掐断

📅 2026-10-12 👁️ 0

改了配置重载的瞬间,正在传输的请求会不会被直接掐断?默认不会。重载(reload)与重启(restart)的差别正在这里:重载时主进程不退出,它按新配置拉起一批新的工作进程,把新连接交给它们,同时让旧工作进程进入退出流程——旧进程不再接受新连接,但会继续处理已经建立的连接,直到这些连接自己结束。所以短请求和长请求在重载瞬间都是安全的。会被掐断的情况只有一种:你给旧进程设了退出时限,时限一到,进程会尝试关闭当前所有仍打开的连接来结束自己。

退出时限管的是哪一种连接

nginx 核心模块文档里这条指令的说法很直接:worker_shutdown_timeout 为工作进程的优雅退出配置时限,时间到期后 nginx 会尝试关闭当前所有仍打开的连接以便完成退出;该指令从 1.11.11 版本引入,作用域是主配置层。注意它管的对象——已经建立的连接,而不是新来的请求。默认值是不设置,也就是让旧进程等到所有连接自然结束。这条默认值本身就说明了取舍:不设时限,退出时间不可控;设了时限,传输中的请求要承担被切断的代价。

哪些场景会被时限伤到

三类最典型。大文件上传:一次传输可能持续几十秒以上,时限短于传输时长,用户看到的就是上传到一半失败,而且重试还会撞上下一轮重载。长连接与流式响应:服务端推送、事件流这类连接的目的就是长期保持,任何时限都会主动把它切断。排队型任务接口:请求本身处理时间长,超时切断之后客户端无法得知服务端是否已经完成处理,容易出现重复提交。反过来,几乎不受影响的是一闪即断的短请求和已经完成响应的空闲连接。

设得太短和太长各有什么后果

时限太短的后果是可感知的失败:连接被强制关闭,客户端表现为中断,日志里则看不到明确原因,因为这是按设计执行的动作。时限太长或不设的后果更隐蔽:旧工作进程长期滞留,内存占用降不下来,同时新旧两套配置并存——限流阈值、缓存规则、证书在两组进程里不一致,排查时看同一份配置却得到两种行为。对内存敏感的场景这一点尤其值得注意,Go 技术栈的站点本身内存占用比 PHP 类程序低约 80%,滞留进程带来的额外占用在整体开销里因此更明显;页面加载速度直接关系到能否稳定承载单机约 500 万 PV 量级的负载,而旧进程没退干净时,新配置的优化要到下一轮才完全生效。合理的做法是把时限设成略长于业务里正常的最长请求时间,并在变更窗口内避免频繁重载。

改完之后的验证方式

先做语法与配置检查,确认新配置可加载;再执行重载而不是重启,保留正在进行的传输。重载之后确认三件事:新的工作进程已按新配置开始接活;旧进程处于退出状态且数量在减少;如果设了退出时限,观察是否在预期时间点归零。用 Docker 镜像部署时还要注意一点:容器里的进程信号要能传到主进程,重载动作才有效,直接重建容器属于重启,会连带切断全部连接,和重载不是一回事。AnQiCMS(安企CMS)默认监听 8001 端口,反向代理配置改动之后同样按这个顺序验证:先检查配置,再重载,然后从站外确认新规则生效、旧请求未被打断。

常见问题

问:重载和重启该选哪个? 答:只改配置内容选重载,改到必须重新加载程序本身的选项才选重启。重载保留传输中的连接,重启不保留。

问:怎么知道旧进程还活着? 答:看工作进程数量。重载后短暂出现两倍进程是正常现象,之后应回落到一批;长期不回落说明还有连接没结束。

问:长连接业务要不要设退出时限? 答:要设得更宽,或者不设。这类连接本身没有自然结束时间,短时限等于定期制造中断,除非你有明确的切换窗口。

相关文章

同一个修复日下挂着两条上报日不同的公告,跟进按哪个时间排

同一个修复日下挂着两条上报日不同的公告,跟进按修复日排,不按上报日排。修复日代表补丁实际随哪个版本发布,是你能动手的那一天;上报日只说明漏洞被知会的时间,用来估算暴露窗口有多长;公告发布日则是***息的时间,通常不早于修复日。以 Joomla 安全中心两条核心公告为例,上报日分别是 8 月 19 日与 8 月 2 日,修复日都是 9 月 25 日,受影响区间与升级目标版本也一致。

2026-10-12

核心公告的成因写着内置第三方库,站方除了等补丁还要看哪一段

成因写着内置第三方库的核心公告,漏洞不在站方自己写的代码里,却随核心一起分发,因此不能靠改自己的模板或业务代码规避,只能按核心的版本走。跟进时读三段:受影响区间的上下界决定你的版本是否命中,修复版本决定升级到哪一版,评级与利用条件决定排期的先后。以 Drupal 公告 SA-CORE-2026-013 为例,受影响区间跨三个分支,修复分别落在各分支的最新版。

2026-10-12

把拦截名单写进一个文件,为什么会丢条目还越写越大

把登录拦截名单写进单个文件,在并发写入下很容易丢条目:两个请求同时读到同一份内容,各自追加后分别写回,后写入的那份覆盖前一份,被拦过的地址就此从名单里消失。没有容量上限的文件会持续增长,读取和解析的时间随之变长;格式不规则的畸形条目会让解析直接出错,导致名单整体失效。名单只是第一层,服务端仍要有独立的校验与验证码环节。

2026-10-12

在线升级里的数据库脚本为什么要按版本顺序排,跑到一半失败该怎么办

在线升级的数据库脚本必须严格按版本号先后执行,因为每条脚本都以「前一条已经跑完」为前提:新字段还没建起来,后一条往里写值就会失败。跨版本升级时跳过中间版本,表结构会停在半路。脚本执行到一半失败,安全的做法是立刻中止并留下日志,而不是忽略错误继续跑完剩下的脚本,否则问题会被后面的脚本掩盖。升级前先做数据与静态文件备份,升级后逐段核对。

2026-10-12

按自定义字段筛内容时条件失效返回全部数据,先查哪一层

按自定义字段筛内容时条件失效、返回全部数据,先查条件有没有真正进入查询,而不是先查数据。判断顺序是三层:字段名与可用范围是否被允许参与筛选;匹配方式是否把短值命中长值放大;缓存是否复用了上一次未带条件的结果。同类问题在同行程序 PbootCMS 的 V3.2.20 更新记录里被一次性修过三处,包括扩展字段筛选失效返回未过滤全量数据、前台使用扩展字段条件报错,以及短值命中长值导致匹配范围放大。

2026-10-12

AI 爬虫要区分搜索、代理和训练三类用途,站点怎么分别授权

AI 爬虫按用途分三类:搜索类建索引并回荐流量,代理类替用户取页、访问可追溯到具体人,训练类批量复制语料、几乎不回访。三类的收益差别很大,只留一个放行开关就会把愿意付出版权换引用的内容和只想抄语料的对象放在一起。站点分别授权的做法是三层配合:Robots.txt 按用途表达抓取意向,防采集干扰码在内容侧保护正文,llms.txt 说明哪些内容欢迎模型读取。

2026-10-12

训练类抓取占了大头,抓取量和引用量为什么差这么多

AI 抓取量和实际引用量差很多,主因是抓取里近 80% 属于训练类:这类请求复制语料但不产生回访。会带来引用的是搜索与问答类抓取。按抓取与引用比看,Anthropic 接近 5 万比 1,OpenAI 为 887 比 1,Perplexity 为 118 比 1,差距取决于对方是否把来源链接带回答案。内容站的投入应放在可被引用的结构上,而不是追抓取量。

2026-10-12

AI 抓取内容要不要收费,按次抓取这类新模式对内容站意味着什么

AI 抓取内容要不要收费,取决于抓取用途是否给站点带回对等价值:会引用回访的搜索类抓取通常免费放行,批量复制语料的训练类才有收费讨论。按次抓取把授权谈判变成技术开关——抓取方按次付费取页,站方按用途决定放行。对内容站意味着三件事:先有用途区分才谈得上计费,名单与协议是两套控制面,定价与结算仍要靠人工流程兜底。

2026-10-12