速通:使用 HTTP 访问 Cloudflare CDN,其会同样以 HTTP 从源站拉取内容。
新年快乐呀,大家。今天来久违地更新一下博客,我绝对没有忘记专门写一篇贺新年博文。想写本篇博文的起因是莫名其妙的踩坑——最近,我收到连续三封莫名其妙的邮件…
Let’s Encrypt certificate expiration notice for domain “isle.cafe”
Hello,Your certificate (or certificates) for the names listed below will expire in ?? days (on 2025-02-??). Please make sure to renew your certificate before then, or visitors to your web site will encounter errors.
其中过期信息已隐藏。
啊,我博客和网站的证书快过期了…欸,不对,我不是设置了自动程序每天定时检查一次证书并更新吗,怎么会过期呢?于是我挑了个闲时 (反正没那么快过期) 登上服务器看看具体是什么情况。好吧,我在 上篇 的操作后忘记改自动刷新证书脚本的 Web Root 参数了,不过,其实这并不是重点,重点在于我碰到了接下来的日志:
1 | isle.cafe: Invalid status. |
(已经手动增加分行方便阅读)
522?这是我的网站会出现的错误代码吗?根据定义,522 错误码通常用于表示 CDN 服务器从源服务器拉取内容超时。可是当我自己用浏览器访问这个 URL 时,并不超时呀…于是乎开始排查,但是最后其实只能遇到 404 错误码,因为文件已经被脚本自动删除了。我在网上搜索,因为日志中这个 IP 段是 Cloudflare 的,所以就也能搜出 Cloudflare 相关的提问,有人在下面说关闭强制 HTTPS 即可 (这个问题与我相近但不完全一样),我试了一下也不行。后来,我自己通过 curl 访问了日志里的链接,结果真如日志所说,是 522,用浏览器访问因为是默认 HTTPS,我没能得到和验证服务器一样的响应,但是在 HTTP 下就一样了。
又一番排查后,原来是使用 HTTP 访问 Cloudflare,Cloudflare 会同样以 HTTP 从源站拉取内容…而我之前直接给服务器开启了全盘 HTTPS,根本没开放 HTTP 的端口,导致 Cloudflare 访问超时。在我额外配置了 80 端口上的服务后,证书颁发工作就回归正常了…其实都用上 Cloudflare 了,不能用它私自颁发的的证书给网站使用吗,反正也不通过源站 IP 直连。
也算是新年遇到的第一件奇怪的需要折腾的事情了,记录一下,祝大家新年快乐。