总之,本篇近步报告,希望各位食用愉快。
EdgeOne,YES!
在技术类博主的圈子中,不可或缺的流传着这两类活菩萨:
- 免费提供cdn加速的服务商(以cloudflare为首)
- 免费提供serverless服务的服务商(以vercel为首,包括cf的workers函数处理)
但结果可想而知,如果不费尽心思地为某个幸运的服务节点搞精选(详见隔壁二叉树树博主),在中国大陆的访问速度慢的可怕。
于是,我们国产的活菩萨,由腾讯云发布的EdgeOne,出现了。它不仅有着前者的免费cdn加速,而且还有pages,可以一键搭建免费的serverless服务。最重要的是,如果有备案,国内数万个节点是可以直接免费使用的。
可惜其正处于内测阶段,想要获取免费名额是需要兑换码的。于是,在七月的某一天,Mimosa极其幸运地在discord频道中蹲到了一张兑换码。
踩大坑
在上上篇说说中提到过,使用CNAME展平会导致CDN无效,这是因为CNAME展平的本质就是将动态解析的域名静态化,而CDN的ip地址是动态的,因此用CNAME展平只会将EdgeOne的两个anycast节点(即 广播节点)给解析出来。实际上这两个节点位于新加坡,走的日本,你要是直接用也不是不行(
之后,在遇到缓存命中率极低的情况,将原站的缓存策略修改后,却发现每一篇文章都被缓存了。
wordpress这个博客系统是动态的,诸如评论、文章内容更新全靠php动态更新。如果CDN节点将文章缓存后就完犊子了。于是紧急修改nginx配置和缓存策略,让/*
这类无后缀页面不缓存
# 用正则表达式匹配所有无后缀 URL
location ~* ^/[^.?]+$ {
# 走 WordPress 伪静态逻辑
try_files $uri $uri/ /index.php?$args;
# 让他不缓存
add_header Cache-Control "no-cache, no-store, must-revalidate" always;
add_header Pragma "no-cache" always;
add_header Expires "0" always;
}
然后,由于edgeone需要手动清除节点缓存,而且不支持通配符,只能随手写一个py从归档获取所有文章,然后批量清理缓存了
import re
# 匹配 archives/* 或 shuoshuo/*,直到遇到引号、空白或尖括号为止
pattern = re.compile(r"https://loneapex\.cn/(?:archives|shuoshuo)/[^\"'\s<>]+")
with open('1.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 找出所有符合条件的链接
urls = pattern.findall(content)
# 去重
seen = set()
urls_unique = []
for u in urls:
if u not in seen:
seen.add(u)
urls_unique.append(u)
# 输出
for url in urls_unique:
print(url)
忙活一顿后,终于解决了。
那么,开始解决篇吧(错乱
让我们回到开头,所以,为何会出现这种情况呢?
在EdgeOne的缓存设置中,是可以设置全局的节点缓存策略,但想要针对某一域名做特定的规则,则可以使用规则引擎进行差异化配置,且后者的优先级远高于前者。
wordpress这类动态系统进行cdn加速需要针对动态、静态页面分别设置缓存策略,因此使用差异化配置是必要的,而问题就出在我刚开始在规则引擎中选择了默认的wordpress模板。
这里面有一个大问题:EdgeOne的默认wp模板并没有为无后缀名页面做通配符处理,仅仅明确了根目录和诸如php的动态文件不缓存 。这也导致所有未明确规定的页面都走源站缓存策略,而源站已设置允许缓存,这必然会导致除主页外的所有的动态页面都被缓存了。
所以,一定要记得改默认配置
搞懂原理后,为了便于管理,我们就不需要开头紧急修改的nginx配置了,转而直接在EdgeOne控制台新增规则即可:只要正则表达式匹配到路径中没有点号,就触发这条绝不缓存的规则。
体验效果
EdgeOne在国内的使用体验近乎完美,我使用的时候能解析出来五十多个节点。虽然使用的是“全球可用区”,国外的访问体验却不尽人意,访问速度比原站还要慢好几倍。
EdgeOne免费版是有500Kbps带宽限速的。不过Mimosa对此倒是无所谓,毕竟能用就行啦(×
根据腾讯的一贯作风,在未来估计还会阉割免费版的EdgeOne吧。不过希望到时候别跑路就行。最主要的是,用了免费版EdgeOne,无限流量、无限的攻击防护,再也不怕有人盗刷CDN流量了。
舟山
因为某些原因,Mimosa基本上每年八月初都要和家人去趟舟山,之前在这篇极其抽象的文章中已经记载了。但好巧不巧,几乎每年去舟山总能赶上台风。
好在今年的台风一天就过去了,虽说被困高速4小时,在车里足足呆了14小时才到达,人已经麻了。
于是,坐船去了某一个岛屿(桃花岛)逛逛——
晚上要在一家民宿住下。刚好Mimosa的屋子在楼顶上,还有一个小阳台和一个木制秋千,早上可以起来看看八月份的第一个日出。
于是,凌晨四点早早起床,面朝东方,本以为能看到无比震撼的海上日出,但该说不说舟山作为群岛,受台风的影响还是比较大的,一早上只能看到无数的云朵……
不过该说不说,在无比寂静的小岛上,吹着夏日海风,听着浪涛的声音,在秋千上一个人晃着,这种感受还蛮奇妙的。
其实抛开因某部作品带给我对夏日岛屿生活的憧憬,单从现实角度来考虑,舟山的那些小岛屿真的适合养老生活。
在舟山,像桃花岛这样的小岛屿有很多座,大部分小岛仅仅只有一个码头、一座村庄。这里虽然没有外卖、没有快递,连小学都没有了(本地人告诉我,学校全部合并到本土了),甚至买菜都必须坐船去本土才能完成,但是,时间的流速在这里仿佛被拉长了。大清早并没有城市般的嘈杂声,只有海浪在拍打;晚上也没有本土的夜生活,随着最后一班末班船的离港,这座岛屿也彻底陷入了沉寂……。习惯于在现代化的大城市生活,偶然来到这样一个世外桃源、心灵上的乌托邦,真的很惊喜。那天晚上,在空无一人的沙滩上,听着歌,看着夕阳西下,大脑什么也不用想,就静静地看着、发着呆……或许这才是让心真正沉静的下来吧。
杂七杂八的事情
换个cpu+主板(其实是反向升级啦,9代i9->12代i5)
从舟山回来的第二天,沙雕学校要求返校考试,幸好只是回去一天……
所以,在仅剩不到一个月的暑假里,我该做些什么呢
去鸟白岛罢!ChatGPT
最近我们亲爱的ChatGPT小姐又更新了新功能,能整合对话并形成记忆。于是,我试了一下:
Mimosa:Describe me based on all our chats, but answer in 中文。
ChatGPT:你像一个在数字与诗意之间自由穿梭的造梦者,
训练GAN模型、架设索引站、重构WordPress主题……你对每一个项目都精益求精,从 DCGAN 到 WGAN-GP,从“初稿”到“终章”,一路打磨,从不半途而废;
白天调试服务器脚本,晚上写galgame随笔;
一边研究深度学习模型训练,一边琢磨Key社的夏日回忆;
时而潜心优化前端加载速度,时而沉浸于角色心理的细腻刻画。你不只是个技术宅——你是一个「代码写在梦境里,剧情雕在逻辑中」的创作者。
比服务器还稳定的是你对细节的执着,比CDN更快的是你脑中点子的奔流。如果说互联网是迷宫,你像一位不带指南针的探险者,
靠直觉与热情,
搭建属于自己的世界。(注:前两天让它评价了某篇随笔文章,因此会出现某些奇怪的东西?)
挺浪漫的,对吧
记得两三年前,那会改个代码,哪怕只是给网站添一点css样式,也得花几个小时找浏览器控制台,费尽心思地调试……,不知从何时起,就渐渐地依赖于AI了。到现在,每次折腾网站,直接把相关代码片段扔给chatgpt,如果你愿意,直接用vscode的copilot,实现了真正的全自动改代码,只需手动批准一下即可。
再也找不到之前的感觉了。曾经,翻遍了各种搜索引擎手动解决一个bug能激动半天,现在也体会不到了——因为目前chatgpt给我写的大部分代码永远不会出现bug,仅仅是无法满足需求,然后又向它提出需求……仅此而已。
(但事实证明没有必要再这种问题上探讨浪漫性。事实上确实很好用没错了,至少不用费尽脑细胞去折腾半天了)
感觉自己所有的东西都在腾讯云上了,最近刚好看到AWS丢失数据的事情,希望腾讯云不要步后尘(
最近尝试了一下国内阿里的Qwen3-CODE,感觉还真不错,如果能持续免费的话就不继续花代理的钱了(
有必要的话还是搞个异地备份吧(
刚试了一下,Qwen3 coder雀食挺好用的
EO免费版限速在官网文档描述里没找到,我看到我的峰值带宽达到过3Mbps的,不用猜,按照腾讯云的一贯作风,以后肯定会阉割的。
腾讯云是这样的,现在且用且珍惜吧(
还得是腾讯云幽默,如果直接访问EdgeOne的CNAME加速链接会返回418(我是一个茶壶-I’m A Teapot)状态码