V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wenerme
V2EX  ›  程序员

迁移阿里云 CDN 到 Cloudflare

  •  
  •   wenerme ·
    wenerme · 2022-10-07 14:59:34 +08:00 · 3784 次点击
    这是一个创建于 785 天前的主题,其中的信息可能已经有所发展或是发生改变。

    迁移阿里云 CDN 到 Cloudflare

    每月节省 30¥ 阿里云全站 CDN 流量费用。

    背景

    https://wener.tech 为国内备案域名,https://wener.me 为未备案域名,两个站点提供相同内容,数据都为 github pages

    因为一个 repo 只能有一个 CNAME ,所以使用了两个。

    在国内备案域名最省事的方式是放到国内云平台解析,迁出可能导致备案撤销,因此 wener.tech 使用了阿里云全站 CDN 。

    其中 charts.wener.tech 流量最大,因为加到一些 helm charts 的索引站里,且部署很多地方都用到了。 其中量最大的请求为 index.yaml , 单个文件不小,请求次数高,每个月的全站 CDN 基本都花费在了 charts.wener.tech 。

    迁移

    每个月为 charts.wener.tech 流量付费也不是办法,因此打算迁移。

    之前

    graph TD
        charts.wener.tech --CNAME--> AliyunCDN
        AliyunCDN --> GitHubPages
    

    之后

    graph TD
        charts.wener.tech -- CNAME --> fb.wener.me
        fb.wener.me --> ArgoTunnel --Kubernetes--> Nginx
        Nginx --> GitHubPages
    

    因为 wener.tech 是在国内,因此只能使用 CNAME 方式到 cloudflare ,cloudflare 支持为外部域名配置 ssl ,然后 fallback 到托管域名。

    使用了 Nginx 作为反向代理缓存,尝试了 Varnish ,但发现还是 Nginx 最为简单暴力。

    GitHub Pages 有时候在国内也不一定能访问,加了本地缓存是最为保险的。

    Note Why choose nginx as proxy cache.

    Cloudflare 缓存命中问题

    一开始缓存命中是很低的

    因为 Cloudflare 基于 extension 缓存而不是 mime ,且默认不缓存 html yaml 这种,在通过 Page Rule 添加全站缓存后,缓存命中率一下子就上去了。

    就这样每个月节省了一小笔阿里云全站 CDN 流量费用。

    穿透到 Nginx 的流量

    10 条回复    2022-10-08 21:17:25 +08:00
    liuxu
        1
    liuxu  
       2022-10-07 16:00:09 +08:00
    cf 减速,还可能被假墙攻击,你每天 2G 流量的小博客直接弄台轻量云裸奔就好了
    Cify
        2
    Cify  
       2022-10-07 20:50:58 +08:00
    请问这个如何设置?

    因为 Cloudflare 基于 extension 缓存而不是 mime ,且默认不缓存 html yaml 这种,在通过 Page Rule 添加全站缓存后,缓存命中率一下子就上去了。

    另外 cname 如何到 cf? dns 用的是 cf 的吗?
    因为 wener.tech 是在国内,因此只能使用 CNAME 方式到 cloudflare ,cloudflare 支持为外部域名配置 ssl ,然后 fallback 到托管域名。
    Terminl
        3
    Terminl  
       2022-10-07 23:38:42 +08:00
    写了一堆。简单来说就是上了 CF 。还没有做流量分流,由于 CF 被针对的关系,你这样做备案域名可能会因为网站打不开而被注销。
    wenerme
        4
    wenerme  
    OP
       2022-10-08 07:36:47 +08:00
    @liuxu 轻量云裸奔 又是一个额外的维护投入节点,而且轻量云不可以自定义镜像。cf 的拦截都是基于 sni 的,正常域名问题不大,只要不触犯规则。
    wenerme
        5
    wenerme  
    OP
       2022-10-08 07:38:58 +08:00
    @Cify

    1. Rules ,Page Rule ,新增

    charts.wener.tech/*
    Cache Level: Cache Everything

    2. SSL/TLS ,自定义域名,新增自定义域名,按需配置好即可
    wenerme
        6
    wenerme  
    OP
       2022-10-08 08:47:25 +08:00
    @Terminl 流量分流是什么意思?我理解 cf 是基于 sni 封的,所以只要站点内容没问题,就没问题
    Terminl
        7
    Terminl  
       2022-10-08 10:46:49 +08:00
    @wenerme 你的站点内容没问题,你怎么保证其他网站用 CF 的内容没问题? 按照你的逻辑直接上 GitHubPages 裸奔不是更省事。
    wenerme
        8
    wenerme  
    OP
       2022-10-08 11:19:21 +08:00
    @Terminl 基于 sni 封,直接拦截域名就是了,如果哪天全部 cf ip 都被封了,那就是另外一码事了。GitHubPages 裸奔太慢而且不稳定,所以才套一层缓存。
    liuxu
        9
    liuxu  
       2022-10-08 12:48:34 +08:00
    @wenerme

    https://www.liuquanhao.com/ ,这是我博客,可以和你的博客对比一下,是腾讯云轻量 + 腾讯云 cdn ,浏览器本地有 serviceworker 缓存

    轻量可以自定义镜像,假墙攻击和 cf 的拦截无关,cf 各种功能很高级,但是其本身网络到大陆网络不通畅是暗伤
    wenerme
        10
    wenerme  
    OP
       2022-10-08 21:17:25 +08:00
    @liuxu 的确快不少

    ```
    $ time curl https://www.liuquanhao.com/ -s | wc -c
    24920

    real 0m0.078s
    user 0m0.022s
    sys 0m0.020s
    ```

    ```
    $ time curl https://www.wener.tech -s | wc -c
    12222

    real 0m0.686s
    user 0m0.021s
    sys 0m0.020s
    ```


    https://www.wener.tech 也是本地缓存,访问一遍后都是直接打开,也是 prefetch ,点击相关内容是直接打开

    不过我倒不是在乎这点速度,主要是一天 5G 流量走之前全站 CDN 觉得不值得,我也没有开 腾讯云轻量,只有个普通按量付费的服务器,所以主要是节省这个成本

    我直接一般都是用 https://www.wener.me ,速度上感觉影响不大,https://charts.wener.tech/ 是给 GitOps 用的,速度影响也不大,90% 缓存命中,速度已经是 CF 能提供的最佳速度了。


    阿里云 香港 轻量 是 1T 流量,但是大陆地区好像只有免费 20G ,流量还是会超标。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2472 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 02:23 · PVG 10:23 · LAX 18:23 · JFK 21:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.