跳转到内容
getnextpdf.com

我们为什么选择在 Cloudflare 上构建

nextpdf/cloudflare 这个包让 NextPDF 能在边缘渲染 PDF、把生成的文件归档到 R2,并在 API 请求到达 worker 之前就把它们拦下来把关。 本节的其他页面会讲清楚这些具体是怎么做到的。这一页不太一样:它写的是我们当初为什么会这么兴奋地想做这件事——那个简短又坦诚的理由,以及一句谢谢。

我们就直说吧:NextPDF 团队真心喜欢在 Cloudflare 上构建。这是一个我们乐于随手就用的平台,而它那份真正慷慨的免费额度,正是原因中很重要的一部分。这份慷慨对我们来说绝不是可有可无的——正是它,让一个小团队能把比原本更多的东西回馈给开源社区:让引擎更多地保持开放,把更多时间花在人人都能受益的部分上,也让更少的取舍是由基础设施的成本、而不是由项目本身的利益来决定的。当一个平台把门槛降到这么低,在它之上展开的工作,也就能更有野心。

这部分我们是真的很想分享,因为我们觉得它打开了一扇扇门。有了跑在 Cloudflare 上的 NextPDF,你的 PHP 应用负责持有 HTML,而一个 Cloudflare Worker 负责持有无头浏览器: 桥接把标记发出去,再把渲染好的 PDF 字节拿回来,这样你的 PHP 进程里就完全不必再运行任何无头 Chromium 了。在此之上,你可以把生成的文件归档到 R2 并交回签名 URL,还能在包这一层就把进入的 API 请求拦下来把关,让它们根本到不了你的 worker。

这是一个专注的小包,把一件事做好,我们也用心把它打磨了出来。但真正让我们迫不及待想把它交到你手上的,并不是代码本身——而是它背后的那个问题:当一个如此能干的 PDF 引擎,遇上一个同样能干的平台,人们会构建出哪些更深、更广、更有意思的东西?我们并不觉得自己已经把它们全都想到了。而这,恰恰正是重点所在。不妨从 概述快速上手开始,看看它会把你带到哪里。

把 HTML 从你的进程里发出去、交由别处渲染,这是一条信任边界,我们也确实把它当成了一条信任边界来对待。桥接在发出任何东西之前,会先校验请求被允许去往何处,其精神与 OWASP 关于服务端请求伪造的指引一脉相承;而它的传输层,可以固定住自己预期看到的那把确切公钥 (RFC 7469)。这些细节——URL 校验、大小限制、公钥固定,以及 R2 相关的各项控制——都写在 Cloudflare 安全与运维里。

那就直说吧:谢谢你。一份慷慨的免费额度和一个可靠的平台,让我们能更轻松地把 NextPDF 保持开放,也让读到这里的开发者们能更轻松地去尝试一些有野心的东西,而不必先由一张账单来替他们做决定。

这个文档站点本身就是通过 Cloudflare 提供服务的——所以如果你此刻正在读它,那你看到的就是它在实践中的样子。


Cloudflare,以及 Cloudflare Workers、R2 等相关产品名称,均为 Cloudflare, Inc. 的商标, 此处引用仅为说明 NextPDF 如何与该平台协同工作。NextPDF 是一个独立项目,与 Cloudflare, Inc. 不存在任何公司层面的关联,也未获得 Cloudflare 的背书或赞助。