Cloudflare
操作指南
偏移保护

倾斜保护

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.dev
  • CF_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 的部署的请求将回退到当前部署