倾斜保护
Cloudflare 适配器基于 预览 URL (opens in a new tab) 提供 实验性支持 的倾斜保护。
对于 实现 Durable Object 的 Worker (opens in a new tab),预览 URL 被禁用。如果你的应用使用了 Durable Objects,它们需要在单独的 Worker 中实现。
如何启用倾斜保护
OpenNext 配置
将 cloudflare.skewProtection.enabled 设置为 true 以启用倾斜保护:
// open-next.config.ts
export default {
// ...
cloudflare: {
skewProtection: {
enabled: true,
// 要使用的先前版本的最大数量。
// 可选,默认为 20。
maxNumberOfVersions: 20,
// 要使用的最旧版本的期限(自上次部署日期起)
// 可选,默认为 7 天。
maxVersionAgeDays: 7,
},
},
} satisfies OpenNextConfig;Wrangler 配置
Worker 需要提供服务正确版本的应用资产。为此,它需要在传入请求与资产匹配之前执行。在你的 wrangler 配置中将 run_worker_first (opens in a new tab) 设置为 true 以启用此行为:
// wrangler.jsonc
{
"name": "my-app",
// ...
"assets": {
"directory": ".open-next/assets",
"binding": "ASSETS",
"run_worker_first": true,
},
// ...
}环境变量
使用倾斜保护时应设置以下环境变量:
CF_WORKER_NAME应设置为 worker 的名称,即根据上述配置为my-app。如果你使用的是环境,应用名称应包含你的环境,即my-app-<env>CF_PREVIEW_DOMAIN是部署预览的workers.dev子域,即<version>-<worker_name>.<domain>.workers.devCF_WORKERS_SCRIPTS_API_TOKEN是一个具有Workers Scripts:Read权限的 API 令牌CF_ACCOUNT_ID是应用部署所在的 Cloudflare 账户 ID。
这些变量用于检索你应用的过去部署。
请注意,在此上下文中,环境变量包括你的本地 Cloudflare 环境变量 (opens in a new tab) 和进程的环境变量。如果在两处都设置了变量,进程环境变量将优先。
Next 配置
每次部署应用时,你必须在 next 配置中设置不同的 deploymentId。如果 deploymentId 已被之前的部署使用,你将收到错误。
cloudflare 适配器导出一个 getDeploymentId() 函数,可用于生成唯一的部署 ID。
// next.config.ts
import { getDeploymentId } from "@opennextjs/cloudflare";
const nextConfig = {
// ...
deploymentId: getDeploymentId(),
};你需要知道的事项
- 因为 Worker 被配置为在资产 Worker 之前运行(
run_worker_first),请求资产将计为对你的 Worker 的一次请求 - 请求较旧的部署将生成 2 个请求:对最新版本的请求和对较旧版本的请求
- 目前无法删除部署
- 对较旧部署的请求将比对应用最新版本的请求慢几毫秒
- 对早于
maxNumberOfVersions或早于maxVersionAgeDays的部署的请求将回退到当前部署