业务从本地防火墙或高防IP切换到云防护节点,最怕的不是技术复杂,而是切换瞬间的流量中断和会话重置。很多团队在迁移时直接改DNS解析,结果发现部分用户DNS缓存未过期,流量继续打向旧地址;或者新节点未完成TLS证书部署,导致大量握手失败。无损切换的核心在于提前完成节点预热、协议对齐和流量灰度,而不是指望一次解析变更就能平滑过渡。

先明确一个基本判断:所谓“无损”,并不是指零毫秒切换,而是指在切换窗口内,已建立的TCP连接不中断、应用层会话不失效、用户无感知。要做到这一点,必须把切换拆成四个阶段:节点准备、流量牵引、会话保持、回退预案。每个阶段都有具体的配置项和验证方法,缺一个环节都可能造成业务抖动。

节点准备:把云防护节点先“养”起来

云防护节点不能等到切换当天才创建。正确做法是提前至少72小时完成节点初始化,包括源站IP白名单添加、TLS证书部署、HTTP/2和HTTP/3协议配置、WebSocket支持、自定义端口放行。很多业务在本地只开了443端口,但云防护节点默认可能只转发80和443,如果业务还有8443或8080端口,必须提前在节点上配置端口映射,否则切换后这些端口直接不可达。

证书是最容易出问题的环节。云防护节点通常要求上传证书私钥,如果源站用的是泛域名证书,节点可以直接复用;如果是单域名证书,需要确认节点绑定的域名与证书完全一致。建议在节点上开启“源站证书校验关闭”选项,避免因为源站证书过期或域名不匹配导致回源失败。同时,节点上的TLS版本建议与源站保持一致,至少支持TLS 1.2,避免部分老旧客户端握手失败。

流量牵引:用CNAME而不是直接改A记录

无损切换的关键技术动作是引入CNAME解析层。如果业务域名当前直接解析到源站IP,切换时不要直接把A记录改成云防护节点的IP,而是应该先在DNS服务商处创建一个新的CNAME记录,指向云防护平台分配的接入域名。这样做的好处是:云防护平台可以在接入域名后面动态调整节点IP,当节点需要扩容或故障切换时,业务方无需再改DNS。

具体操作上,先把业务域名的TTL降到300秒甚至60秒,等待一个完整的TTL周期,让旧解析记录在递归DNS中快速过期。然后添加CNAME记录,同时保留原A记录作为回退。此时流量并不会立即切到云节点,因为DNS解析优先级取决于记录类型和配置顺序。建议使用DNS服务商的“权重解析”或“线路解析”功能,先让一小部分用户(例如测试省份或特定运营商)解析到CNAME,观察一段时间后再逐步放量。

灰度切换的粒度可以按地理位置或运营商划分。例如先切电信用户,再切联通用户,最后切移动用户。每个灰度批次之间至少间隔30分钟,观察源站连接数、节点转发量、错误日志。如果节点上出现大量502或504,说明回源链路有问题,需要检查源站防火墙是否放行了云节点的回源IP段。

会话保持:不要让长连接在切换时断开

对于已经建立的TCP连接,单纯改DNS解析是无法迁移的。例如一个用户正在通过WebSocket进行实时通信,他的连接已经建立在源站IP上,即使DNS已经指向云节点,这个旧连接也不会自动转移到新节点。要解决这个问题,需要在应用层做连接迁移设计。

一种常见做法是在源站前部署一层支持连接复用的代理,例如Nginx或HAProxy,并在切换前将新连接逐步引导到云节点,旧连接继续由源站代理服务直到自然断开。对于WebSocket类长连接,可以在应用协议中加入重连机制,当客户端检测到连接被关闭时,自动向新地址发起重连。云防护节点需要配置WebSocket升级支持,并设置合理的空闲超时时间,避免长连接被节点主动断开。

对于HTTP短连接,会话保持主要依赖Cookie或Token。切换时只要保证源站和云节点回源到同一个源站服务器组,用户会话就不会丢失。但如果源站做了IP级别的会话绑定,例如把用户会话绑定到源站某个具体后端,切换后回源IP变成云节点IP,可能导致会话失效。此时需要在源站会话管理中去掉对客户端IP的强依赖,改为使用Cookie中的会话ID。

回源策略:多源站负载与故障转移

云防护节点回源时,需要配置源站列表和健康检查。建议至少配置两个源站IP,并启用主动健康检查,检查路径可以是一个轻量级的健康检查接口,例如返回200状态码的/health。健康检查间隔设置为5秒,失败阈值设置为3次,这样当主源站故障时,节点能在15秒内自动切换到备用源站。

回源协议也是一个容易被忽略的细节。如果源站只支持HTTP,而云节点默认用HTTPS回源,会导致回源失败。需要明确配置回源协议为“跟随用户请求协议”或“强制HTTP”。如果源站有SNI限制,需要在节点上配置回源SNI为源站域名,否则源站可能返回默认证书导致握手失败。

还有一个关键点是回源HOST头。很多源站Nginx配置了基于域名的虚拟主机,如果云节点回源时HOST头默认填的是节点IP或接入域名,源站会返回404或默认站点。必须在节点上显式设置回源HOST为业务域名,并确保源站Nginx的server_name包含该域名。

防护策略迁移:不要把规则留在本地

业务切换到云防护节点后,原本在本地防火墙或WAF上的防护规则需要同步到云端。如果只迁移流量不迁移规则,等于把业务裸奔在公网上。云防护平台通常提供自定义规则引擎,可以把本地的IP黑白名单、地域封禁、URL访问控制、CC防护阈值等策略逐条迁移。

迁移时注意规则优先级。本地防火墙可能是“先匹配先执行”,而云平台的规则引擎可能是“按优先级数值执行”。建议先在测试环境验证规则顺序,确保核心阻断规则优先于放行规则。对于CC防护,云平台的默认阈值可能不适合业务,例如一个正常用户每分钟请求50次,而云平台默认阈值是30次,切换后会误伤正常用户。需要根据业务实际QPS调整阈值,并设置白名单保护健康检查流量。

监控与回退:切换不是终点

切换完成后,需要同时监控三个层面的指标:DNS解析生效情况、云节点转发状态、源站真实负载。DNS生效情况可以用多个运营商的公共DNS查询工具验证,确认全国主要递归DNS已经返回CNAME记录。云节点转发状态看节点上的请求数、错误率、回源延迟。源站负载看CPU、内存、连接数,确认回源流量没有超过源站承载能力。

回退预案必须提前写好,不能等到出问题再想。回退的核心动作是把DNS解析切回源站A记录,同时降低TTL到60秒。但要注意,如果云节点上已经累积了大量用户会话,直接回退会导致这些用户会话中断。所以回退时应该先停止新增流量进入云节点,保留存量会话继续由节点转发,等存量会话自然结束后再完全切回。这个过程可能需要30分钟到2小时,取决于业务会话时长。

无损切换不是一个一次性动作,而是一套完整的流程设计。从节点准备到流量灰度,从会话保持到回源策略,每个环节都需要提前验证。真正做过迁移的团队都明白,最可靠的方案是让新旧两套环境并行运行一段时间,而不是指望某个深夜的一次解析变更就能完美过渡。把切换做成一个可逆、可观测、可回退的过程,才是“无损”的真正含义。