CDN回源用HTTPS还是HTTP,成本差在哪

CDN对外开HTTPS已经是常规操作,真正容易被忽略的是“CDN节点到源站”这一段,也就是回源协议。很多业务上线时直接选“跟随客户端协议”,用户HTTPS访问,CDN就HTTPS回源;用户HTTP访问,CDN就HTTP回源。看起来省心,但账单和源站压力不一定最优。

实际使用中发现,CDN回源用HTTPS还是HTTP,成本差异主要不在CDN流量费本身,而在源站CPU、连接数、握手开销、证书维护、排障复杂度,以及极端情况下的回源延迟。流量单价通常不会因为回源协议从HTTP变成HTTPS就直接翻倍,真正被放大的,是源站侧的计算和连接管理。

先把链路拆开看

一条典型访问链路是:用户浏览器 -> CDN边缘节点 -> 源站服务器。

用户到CDN这一段建议HTTPS,不用太纠结。浏览器安全策略、SEO、支付登录、Cookie Secure、HSTS,都要求这段尽量走HTTPS。讨论HTTP还是HTTPS回源,讨论的是CDN边缘节点到源站这段。

如果CDN到源站走HTTP,CDN负责对外TLS终止,回源时用明文HTTP请求源站。如果CDN到源站走HTTPS,CDN节点还要和源站建立TLS连接,源站也要处理证书、握手、加解密。

这里补充一点,回源HTTP不是说全链路都不安全。用户到CDN仍然可以是HTTPS,只是CDN到源站这一段变成HTTP。这个前提是源站最好只允许CDN节点访问,比如做源站防火墙、回源IP白名单、鉴权Header、内网专线或云内网回源。不做限制的话,HTTP回源的风险会明显增加。

CDN账单上通常差不多,源站账单可能有差

很多人关心“HTTPS回源会不会让CDN费用更贵”。按常见CDN计费方式看,主要费用还是下行流量、带宽峰值、请求数、HTTPS请求数、动态加速等。回源协议本身通常不是一个单独高价项。

但源站侧不一样。HTTPS回源会让源站多承担TLS相关开销,尤其是动态请求多、缓存命中率低、短连接多的时候,差异会被放大。

可以按这个量级理解:

场景A:静态资源为主,CDN命中率95%以上,回源请求很少。HTTP回源和HTTPS回源的成本差距很小,源站CPU可能只差几个百分点,甚至看不出来。

场景B:API业务,CDN命中率20%到50%,大量请求要回源。HTTPS回源会增加源站TLS握手和加解密压力。如果连接复用做得不好,CPU多消耗10%到30%并不夸张。

场景C:短连接、低缓存、突发流量,比如活动页、登录接口、游戏公告接口、下载鉴权接口。HTTPS回源可能让源站连接数、CPU softirq、Nginx worker压力同时上来。机器规格没留余量时,差的不是一点点流量费,而是要多加机器。

用一组实际估算看差距

假设一个站点每天对外访问量3000万次,CDN缓存命中率80%,也就是大约600万次请求会回源。平均响应体20KB,回源流量约114GB/天。这个流量本身,不管HTTP还是HTTPS,字节数差距很小,TLS记录头、握手包摊下来影响不大。

成本差异在请求侧更明显。600万次回源请求,如果CDN到源站能保持长连接,TLS握手次数可能只有几十万甚至更低;如果连接复用差,握手次数接近请求数,源站压力就明显变大。

粗略对比可以这样看:

HTTP回源:源站主要处理TCP连接、HTTP解析、业务逻辑、磁盘或后端访问。

HTTPS回源且长连接正常:源站多处理TLS握手和加解密,但握手次数被压低,额外CPU一般可控。

HTTPS回源且短连接严重:源站反复做TLS握手,ECDHE、证书链、会话协商都会吃CPU,突发时容易把Nginx或负载均衡打满。

如果一台4C源站原本HTTP回源CPU在35%左右,切到HTTPS回源后,在长连接正常的情况下可能到45%上下;如果短连接很多,可能冲到60%甚至更高。业务本身还要跑PHP、Java、Go服务时,这部分额外开销会和应用CPU抢资源。

带宽成本差距通常不是主因

HTTPS比HTTP多出来的网络开销,主要是TLS握手包、证书链、TLS record header。对于大文件下载、图片、视频切片,这点开销可以忽略。一个10MB文件,多出来的握手和头部开销几KB级别,不值得为这个纠结。

但对于小包API,比如每次响应只有300B、800B、1KB,HTTPS握手开销就没那么轻。虽然CDN回源一般有连接池,但如果源站配置、CDN配置或中间防火墙导致连接复用失败,小包业务会比较吃亏。

实际排查时可以看这几个指标:源站Nginx active connections、accepts/handled/requests比例、TLS握手耗时、CPU user占比、load average、TIME_WAIT数量、CDN回源连接复用率。如果切HTTPS回源后TIME_WAIT暴涨,基本就不是协议本身的问题,而是连接复用没处理好。

安全成本也要算进去

HTTP回源便宜一点,但不是白捡。源站如果直接暴露公网,CDN到源站这段走HTTP,中间链路被抓包或篡改的风险要考虑。尤其是登录态、用户资料、订单、支付回调、后台接口,不建议HTTP回源。

有些业务把源站放在同云厂商内网,CDN通过内网回源,或者源站只开放给CDN回源IP,HTTP回源就比较常见。静态站、图片站、下载站、公开内容分发,用HTTP回源问题不大,前提是源站访问面收窄。

如果源站在海外,CDN节点跨境回源,链路更复杂,HTTPS回源的意义会更大。跨运营商、跨国家、跨机房时,BGP路由路径不可控,明文HTTP回源不适合承载敏感数据。

哪些业务适合HTTP回源

静态资源站比较适合HTTP回源,比如图片、CSS、JS、公开下载文件。用户访问CDN是HTTPS,CDN命中率高,偶尔回源拉取资源。源站只允许CDN回源IP访问,再配合防盗链、鉴权URL,成本和风险都比较好控。

还有一种是源站在内网或者专线环境,CDN回源链路不是普通公网。比如同区域云内网、对象存储私有源、内部SLB后端。这类场景用HTTP回源很常见,因为安全边界不在TLS,而在网络隔离和访问控制。

多说一句,HTTP回源不代表源站可以裸奔。源站安全组、防火墙、回源Host校验、特殊Header校验都要做。很多源站被打,不是因为用了HTTP回源,而是源站IP泄露后还允许全公网访问。

哪些业务建议HTTPS回源

登录、注册、支付、用户中心、管理后台、API接口,建议HTTPS回源。即使会多一点CPU成本,也比后面排安全问题划算。特别是请求里有Authorization、Cookie、手机号、邮箱、订单号这类数据时,不要为了省一点源站资源走HTTP。

金融、游戏账号、企业SaaS、跨境业务,也建议HTTPS回源。游戏业务里经常有登录服、公告服、补丁服、支付回调混在一起,公开静态资源可以HTTP回源,账号相关接口最好HTTPS回源,别一刀切。

如果源站需要校验CDN身份,也可以用HTTPS双向认证或固定证书校验,不过这类配置复杂度会上来,排障时要看证书链、SNI、Host、回源域名、TLS版本。一般业务用普通HTTPS回源加回源IP限制就够用。

HTTPS回源真正容易踩的是连接复用

HTTPS回源成本高不高,关键看连接复用。CDN节点到源站如果每个请求都新建连接,TLS握手成本会很难看;如果能复用连接,差距会小很多。

Nginx源站常见配置要关注keepalive_timeout、keepalive_requests、worker_connections、worker_rlimit_nofile。上游如果还有反代,比如Nginx -> Tomcat、Nginx -> Node.js,也要看后端连接池。CDN到Nginx复用了,Nginx到应用没复用,压力还是会往后传。

源站证书也别用太长的证书链。有些站点证书链配置不规范,多发了中间证书,握手包变大,移动网络和跨境回源时延会更明显。TLS版本建议至少TLS 1.2,有条件用TLS 1.3,握手更省。

实际使用中发现,很多HTTPS回源慢,不是HTTPS本身慢,而是源站没有开HTTP/2、TLS session resumption没生效、CDN回源Host配置错、源站SNI不匹配,或者中间WAF对长连接不友好。

成本差距可以按机器数量估

如果要把“差多少”换成钱,建议不要只看流量费,而是看源站要不要扩容。

举个常见动态站的估算:原来2台4C8G源站跑HTTP回源,CPU峰值55%,切HTTPS回源后峰值到70%。这种一般不用扩容,调一下keepalive、TLS session cache、Nginx worker就能扛。

如果原来CPU峰值已经75%到85%,切HTTPS回源后峰值可能顶到95%,业务高峰开始超时。这时就要加机器,成本差距就变成“多一台或多几台源站的钱”。

假设一台源站每月300元到800元,HTTPS回源导致多加1台,那月成本就是这个量级。大型业务源站规格更高,单台上千元也正常。反过来,如果缓存命中率高,源站本来很闲,HTTPS回源可能每月成本几乎不变。

源站带宽也别忽略

CDN回源会占源站上行带宽。HTTP和HTTPS在带宽上差距不大,但回源策略会影响源站上行峰值。缓存命中率低、刷新预热频繁、Range回源不合理,都可能把源站上行打满。

比如源站只有15Mbps上行,遇到大量回源,协议选HTTP还是HTTPS都救不了,瓶颈是带宽。静态资源或下载类业务,源站要么用对象存储,要么上更大的上行带宽,要么把缓存规则调好。

如果业务在西北电信用户较多,或者需要带一定DDoS防护的源站,可以看129云的西安电信-B型这类机器。4C、4G、50G SSD、15Mbps峰值、50Gbps单机防御,适合小型业务源站或测试回源架构;更高规格的西安电信-B型有金牌6138双路、64GiB内存、500G SSD、100Mbps上行和100Gbps单机防御,更适合企业源站、高防入口后的业务节点。选之前可以把日回源流量、峰值QPS、缓存命中率给客服算一下,热线400-9177118。

海外源站场景下差异会更明显

海外源站回源要看网络质量。普通线路、BGP、CN2、GIA,不同链路的延迟和丢包差别很大。HTTPS回源在高延迟、高丢包链路上更容易暴露问题,因为握手阶段对RTT敏感。

比如大陆CDN节点回源欧洲机房,普通线路RTT可能在180ms到280ms,链路抖动时更高。HTTP短连接已经慢,HTTPS短连接会更慢。TLS 1.2完整握手需要额外往返,TLS 1.3会好一些,但丢包还是会影响体验。

荷兰大宽带这种2Gbps峰值机器,适合海外大带宽分发、国际访问、非大陆用户下载。如果主要访问来自大陆,就要注意普通线路不保证大陆网络访问,CDN回源策略要做缓存和预热,不要让大陆节点频繁跨境拉源。

实际配置时常见做法

公开静态资源:用户到CDN走HTTPS,CDN到源站走HTTP,源站限制CDN回源IP,缓存时间拉长。这样成本低,源站压力也轻。

用户接口:用户到CDN走HTTPS,CDN到源站也走HTTPS,源站启用keepalive和TLS session cache。接口尽量减少无意义回源,能缓存的配置短缓存,比如5秒、10秒,对高并发接口很有用。

后台和管理系统:不建议走普通HTTP回源。后台请求量通常不大,HTTPS回源多出来的成本可以忽略,安全收益更重要。

下载业务:大文件本身用HTTP回源和HTTPS回源带宽差别很小,重点是Range请求、缓存分片、源站上行峰值。大文件站一旦缓存命中率低,源站压力会非常直接。

别把“跟随协议”当默认答案

CDN控制台里的“跟随协议”看起来方便,但会让回源行为变得不稳定。用户HTTP访问就HTTP回源,用户HTTPS访问就HTTPS回源。排障时可能同一个URL一会儿走HTTP,一会儿走HTTPS,源站日志、证书错误、301跳转都会混在一起。

更推荐明确指定回源协议。静态资源明确HTTP回源,敏感接口明确HTTPS回源。不同业务拆不同域名,比如static.example.com、api.example.com、admin.example.com,缓存规则、回源协议、安全策略分别配置。

这里还有个坑:源站如果强制HTTP跳HTTPS,而CDN配置HTTP回源,就会出现CDN回源收到301,再请求HTTPS,或者直接把301缓存给用户。反过来,CDN配置HTTPS回源,源站证书里的域名和回源Host不匹配,也会报525、526、502这类错误。上线前用curl指定Host测一下,比在控制台里猜要快。

怎么判断当前该不该切HTTPS回源

看数据比凭感觉靠谱。先看CDN缓存命中率。如果命中率90%以上,HTTPS回源带来的源站成本通常不大,安全要求高就直接上。

再看源站CPU峰值。如果峰值长期低于50%,切HTTPS回源一般有空间。如果峰值已经80%左右,先压测,别在业务高峰直接切。

还要看请求类型。大文件、图片、公开页面,对HTTPS回源的收益有限;账号、订单、API,收益明显。不要全站用同一个策略。

压测时要模拟CDN回源特征,不要只在内网ab一下。要关注长连接、并发连接数、TLS握手次数、源站带宽、应用响应时间。HTTPS回源压测最好同时看Nginx日志里的request_time、upstream_response_time,以及系统层面的CPU user、system、softirq。

一个比较接近生产的取舍

静态域名走HTTP回源,源站只允许CDN IP访问,缓存命中率做到95%以上。API域名走HTTPS回源,keepalive打开,TLS 1.3打开,证书链配干净。后台域名走HTTPS回源,并限制访问来源。

这样做的好处是钱花在该花的位置。静态资源不让TLS回源消耗源站,敏感数据不走明文链路。后续如果某个域名压力上来,也能单独扩容,不会所有业务绑在一个源站策略里一起抖。

如果你也在找这种高防源站、大带宽源站、海外节点搭配CDN的资源,可以看看129云。游戏、企业站、高防业务对源站线路和防护比较敏感,机器规格、上行带宽、DDoS防御、地区线路要一起看,不能只看CPU和内存。

最后看一个很常见的账

一个企业站,日访问100万,CDN命中率92%,回源8万次,源站CPU平时20%。这种切HTTPS回源,成本差距基本可以忽略,安全要求高就用HTTPS回源。

一个API站,日请求5000万,CDN命中率30%,回源3500万次,源站CPU峰值70%。这种切HTTPS回源前要压测,连接复用没问题还好,没复用就可能要扩容。

一个下载站,日分发5TB,CDN命中率98%,回源100GB左右。HTTPS回源增加的带宽成本几乎不用看,源站上行峰值和缓存预热策略更关键。

一个跨境站,大陆CDN回源欧洲源站,RTT高、偶发丢包。HTTPS回源建议保留,但要减少动态跨境回源,静态资源尽量预热到CDN,接口最好按区域部署源站或做就近接入。