CDN回源SNI

反向代理与CDN回源

我的主页播客为了稳定性考虑是部署在阿里云的ECS服务器上的。
而我的图床和Bucket则部署在家里的服务器,这样可以节省不少的空间费和流量费。
但家里的宽带是没有公网ip的,所以我使用了内网穿透+反向代理的方式访问家里的服务,详见:DNS解析与反向代理
npmUsage.png
这样会有一个问题,我的主页和播客是可以直接通过ip+端口访问的,因此cdn的回源地址就是ip+端口。
但家里服务的域名是全部解析至公网VPS的443端口,再由frp统一转发至家里的反向代理服务器。
那这些服务的回源地址要怎么写呢?全部写VPS的443,要怎么拿到指定站点的资源呢?

回源SNI

这个问题的关键在于,cdn通过ip+端口访问反向代理服务器时没有告知域名信息。
解决的办法是,在https通信中,TLS协议有一个叫做SNI的扩展,它允许客户端在建立SSL/TLS连接的初始阶段就告知服务器其所请求的域名,以便服务器能够正确地返回对应域名的SSL证书,实现HTTPS加密连接。
我所使用的cdn是阿里云提供的服务:

  1. 进入cdn对应的域名管理页。3l2z.png
  2. 左侧导航栏点击回源配置。3x16.png
  3. 在下面找到SNI配置,打开开关并配置相应的域名。30LX.png
    搞定!