Saber 酱的抱枕

Fly me to the moon

09/5
2024
软件

也是用上 Cloudflare 了

久闻 Cloudflare 大名,今日一试,果然是大善人,免费的就很好用,CDN 加速神中神,15 年证书也非常省心!
反观国内云主机厂商,阿里云现在一个账号每年只有 20 个免费的 SSL 证书额度。而且去年免费证书的有效期还是一年,今年就给缩短到 3 个月了,而之前的一年有效期的改为单域名 68 元/年,哈哈,生财有道啊。

我现在只用到了 CDN 和证书,记录下流程。

注册或登录 Cloudflare 账号,进入控制台,添加你的域名,如 saber.love。费用计划选择免费的就行。

如果你的域名不是在 Cloudflare 注册的,那么还需要修改名称服务器(Name Server),这样才能让 Cloudflare 管理这个域名的 DNS 解析。

点击控制台左侧的的“DNS”菜单就可以看到 Cloudflare 的名称服务器。

然后在域名注册商的控制台修改这个域名的 Name Server,设置为 Cloudflare 的这两个 Name Server。

等到 Cloudflare 检查到修改生效后,会给你发送一封电子邮件进行提醒:

并且此时在控制台的“概览”里,也会显示“Cloudflare 正在保护您的站点”:

注意:Cloudflare 默认只会添加这个域名的主域名解析,如果有子域名,需要在 Cloudflare 里手动添加 DNS 记录。

如果这个域名之前用的是普通的 DNS 解析,那么访问过程是这样的:

浏览器 ---- DNS 记录(直接就是服务器真实 IP)

而 Cloudflare 解析生效后是这样的:

浏览器 ---- DNS 记录(Cloudflare 的 IP) ---- 服务器真实 IP

让 Cloudflare 进行 DNS 解析的作用有:

  1. 隐藏源站 IP
  2. 抵挡 DDOS 攻击
  3. 为静态文件做 CDN

这些功能都是免费的。

虽然 Cloudflare 检测到了 Name Server 的变化,但这个域名的 DNS 解析的缓存还需要一段时间才能更新,这不是 Cloudflare 能控制的。我觉得 4 个小时就差不多够了。

如果用户访问这个域名时,他的 DNS 缓存尚未更新,那么他访问这个域名时还是跟之前一样,并没有经过 Cloudflare 处理。

方法 1:可以 ping 一下域名,如果 IP 地址不再是服务器的真实 IP,就说明你的 DNS 缓存已更新,现在的 IP 是 Cloudflare 的 IP。

方法 2:查看请求的 Response header,如果有 Cloudflare 的一些标记,说明已经被 Cloudflare 处理了。例如:

不过这只能代表你自己,可能有些地区的 DNS 缓存此时还没有更新。

本站服务器位于美国,所以在东亚地区访问时的延迟比较高,等待时间也长。

Cloudflare 的 CDN 加速效果我是挺期待的,不过用了之后还是感觉太震撼了,网页资源全部加载完只花了 1.1 秒(图中的静态文件已经全部被 CDN 缓存了):

我在两个月前已经对网页代码进行过很多优化了,但是完全加载时间经常也得 2.5 秒,有时候网络慢的话需要接 3 秒。现在 CDN 消除了网络的短板,把时间直接缩短到 1 秒级别了。

这些走 CDN 的文件,等待时间少的恐怖:

现在我在同一个网页里测试,对比两个月前后的情况:

以前所有文件的加载时间基本都要 500 毫秒以上,稍微大点的图片(超过 200 KB)超过 1 秒也很常见。现在但凡有 CDN 缓存的,都不会超过 200 毫秒。

对于两个背景图片,一个还没被缓存,一个已经被缓存了,这是它们加载时间的差别:

现在本站背景图片的加载速度也有了质的飞跃,爽!


不过现在有个问题,就是网页源码本身加载时间还是很长,经常要 800 毫秒以上。这是因为本站网页都是动态生成的,不能被缓存。

我试了试把首页的代码保存成一个静态的 html 文件,比较有趣,当它被缓存后,我按 F5 刷新(允许缓存),它只需要 300 毫秒。但如果我不带缓存刷新的话就还是要 800 毫秒。

我使用隐身模式模拟首次访问这个静态文件,它也还是要 800 毫秒。所以 Cloudflare 的 CDN 缓存对网页文档本身作用不大吗?至少在首次访问时,网页本身还是源站的加载速度。但是其他静态文件都受到了 CDN 加速:

默认的 TLS 加密模式是“灵活”。如果 DNS 已经由 Cloudflare 处理,那么你应该根据情况设置:

  1. 如果源网站之前没有使用 TLS(也就是只支持 HTTP,不支持 HTTPS),那就保持“灵活”。
  2. 如果源网站之前已经有 TLS 证书(支持 HTTPS),应该选择“完全”(不管你是否要使用 15 年的证书)。
  3. 如果你要把网站的证书换成 15 年的证书,应该在替换后选择“完全(严格)”。

Cloudflare 可以提供 15 年有效期的 TLS 证书,我觉得很好,不仅不用续期,还支持通配符,多个子域名也只需一个证书,这么好的东西怎么能不用呢?

在阿里云,通配符证书最便宜的是一年 1000 元的:

这是最便宜的了,至于更低价格的和免费的都不支持通配符。

没有这么凉心的国内厂商做对比,怎么能显出外国厂商的良心呢?国内营商环境疑似太好了,这要是放开了竞争早死完了。

如果你要换成 15 年的 TLS 证书,建议在前面修改了 Name Server 的步骤之后,等待 4 - 8 小时左右,等到大多数地区的 DNS 缓存都更新了,再使用 15 年的证书。

为什么要等呢?因为 Cloudflare 给服务器颁发的 15 年 TLS 证书是“源服务器证书”,不能直接与客户端通信。

当 DNS 缓存更新后,访问网站的过程中会使用到两个 TLS 证书:

浏览器 ---- Cloudflare 的服务器(边缘证书) ---- 网站服务器(源服务器证书)

此时,当浏览器访问网站时(经过 Cloudflare 处理),它得到的不是 15 年有效期的源服务器证书,而是短期的边缘证书:

边缘证书的有效期通常是三个月,用于向浏览器证明这是与 saber.love 的通信,它的作用就类似于以前我在源服务器上使用的有效期为 3 个月的 Let's Encrypt 证书。

至于 15 年有效期的源服务器证书,只用于 Cloudflare 和服务器之间的“内部通信”,所以不用担心 15 年这么长时间会不会有安全问题。

从实际效果来说,就是 Cloudflare 作为一个中间人代替源服务器做出证明,并阻止客户端直接与源服务器通信,这样可以起到过滤网络请求、保护源服务器的作用。

如果你看到的是 15 年的源服务器证书,说明这次请求没有经过 Cloudflare 处理,而是直接访问源站 IP 的:

此时浏览器会显示证书错误的警告,因为这个证书只适合在 Cloudflare 内部使用。

顺便一提,用 hosts 通过 IP 直接访问本站的方法也会失效,因为上述的证书错误。

因此,为了避免客户端遇到证书出错的问题,就需要等待它的 DNS 缓存刷新为 Cloudflare 的 DNS 解析,然后我们再给网站启用 15 年的源服务器证书。

在左侧选择“源服务器”,然后点击“创建证书”:

下一步可以进行一些配置,通常保持默认即可:

默认就有通配符证书,并且有效期是 15 年,真的太方便了。

之后就会生成证书,只有纯文本内容,需要自行保存:

将“源证书”的内容保存为文件 证书名字.pem,“私钥”的内容保存为 证书名字.key,保存到服务器上。

然后修改 WEB 服务器软件(如 Nginx)的配置,将原本的证书替换成这一对新的证书,最后重启 WEB 服务器软件生效。

生效后,你不会在浏览器里看到这个证书,因为前面说了,浏览器看到的是 Cloudflare 的边缘证书。

提示:

  1. 你不需要手动创建边缘证书,因为 Cloudflare 会自动创建边缘证书,并自动续期。
  2. 使用 15 年证书之后,应该把 TLS 加密模式设置为“完全(严格)”。

也是用上 Cloudflare 了

  1. 233
    Google Chrome 128Google Chrome 128Windows 10/11Windows 10/11

    我倒是想研究下怎么均衡负载 比如服务器A炸了 自动切换到服务器B。。
    顺道 博主IP没打码。

    回复
  2. tatuki
    Google Chrome 128Google Chrome 128Mac OS X 10.15.7Mac OS X 10.15.7

    站主真的很厉害,有没有交流学习群什么的,可以学习学习吗

    回复
  3. 喵喵喵
    Google Chrome 128Google Chrome 128GNU/Linux x64GNU/Linux x64

    这个源服务器证书可不能和普通的证书对比呀。
    CF源服务器证书就是个自签证书,只不过被CF信任了而已。客户端通过CF CDN访问你服务器,看到的是别的证书。
    如果直接访问源站,是会提示证书不被信任的。
    你自己签一个100年的证书,本地客户端手动信任了,那也是可以的。
    普通的证书是无需客户端做任何操作就能被信任的。

    回复
    1. saber 文章作者
      Google Chrome 128Google Chrome 128Windows 10/11Windows 10/11

      是的,不过 CF 的边缘证书是免费的(也有通配符),证书颁发机构是 Google Trust Services。阿里云的证书那么贵是因为要给证书品牌交钱吗?

      回复
      1. 喵喵喵
        Google Chrome 128Google Chrome 128GNU/Linux x64GNU/Linux x64

        有可能就是想捞钱。
        用Let's Encrypt也有通配符证书,不过就是要90天刷新一次。
        找个ACME脚本或者Lego配置自动化也是可以的。
        Lego:https://github.com/go-acme/lego
        我用这个生成通配符证书给局域网的设备使用,爽!

        回复
      1. saber 文章作者
        Google Chrome 128Google Chrome 128Windows 10/11Windows 10/11

        是的,现在源站的证书不能直接用于浏览器,所以你得从域名访问

        回复
        1. locationiskey
          Google Chrome 128Google Chrome 128Windows 10/11Windows 10/11

          当然是域名访问啦……
          想起来了我自己的“地方”也是这样
          给你的源站的证书是CF内部的,外部没法用

          回复
TOP
    显示公告
    聊      天
    吃 零 食
    博客后台
    生存时间
    关闭春菜
    X
    召唤春菜