Cloudflare Workers 环境变量与密钥管理
上一章的 CRUD 接口还没接入真实数据,这一章先解决一个基础但重要的问题,如何安全地管理配置和密钥。真实项目里 API 密钥、数据库连接信息等敏感数据,绝不能直接写在代码里。
为什么不能硬编码
// 反面教材,绝对不要这么写
const API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx";
硬编码密钥的风险有三条。第一,代码提交到 Git 仓库后密钥就永久留在历史记录里,一旦仓库公开就等于泄露。第二,即使仓库是私有的,任何拿到代码的人都能直接看到。第三,密钥更换时必须改代码重新部署,非常麻烦。
正确做法是把敏感信息放到平台侧,代码里只留一个占位名。
两类配置的区别
Workers 把配置分成普通环境变量和加密密钥两类
| 对比项 | 普通环境变量(vars) | 加密密钥(secrets) |
|---|---|---|
| 可见性 | 仪表盘可见明文 | 加密存储,不可查看明文 |
| 用途 | 非敏感配置,如站点名称、开关 | 敏感凭证,如 API 密钥、Token |
| 本地开发 | 写入 wrangler.toml 或 .dev.vars | 写入 .dev.vars |
普通变量给谁都行,密钥必须保密,这个划分要记牢。
代码中读取环境变量
所有环境变量都通过 fetch 函数的第二个参数 env 读取,普通变量和密钥的读取方式完全一样
export default {
async fetch(request, env, ctx) {
const name = env.SITE_NAME; // 普通变量
const apiKey = env.API_KEY; // 密钥
return Response.json({ name });
},
};
普通环境变量配置
在 wrangler.toml 中添加 [vars] 段
name = "my-worker"
main = "src/index.js"
compatibility_date = "2026-01-01"
[vars]
SITE_NAME = "我的网站"
FEATURE_ENABLED = "true"
保存后运行 wrangler dev,代码里就能通过 env.SITE_NAME 读取到值。
也可以直接在仪表盘配置。进入 Worker 的 设置 页面,找到 变量和机密 区域,添加普通变量即可,效果与配置文件一致。
加密密钥配置
密钥不能在配置文件里明文书写,要用专门的命令设置
wrangler secret put API_KEY
命令执行后会提示输入密钥值,输入后回车确认,密钥即加密保存到线上。也可以在仪表盘的 变量和机密 区域添加机密类型的变量。
注意,wrangler secret put 设置的密钥只在线上生效,本地开发时还需要单独配置。
本地开发变量
本地运行时,环境变量和密钥统一写在一个 .dev.vars 文件里,这个文件在项目根目录,格式为
SITE_NAME = "本地网站"
API_KEY = "local-dev-key"
.dev.vars 的内容会被 wrangler dev 自动加载,行为和线上一致。因为文件里可能包含密钥,必须把它加入 .gitignore,绝不能被提交到仓库。C3 生成的项目默认已排除这个文件。
多环境配置
开发环境、生产环境经常需要不同的配置值。Wrangler 支持按环境拆分配置,在 wrangler.toml 中添加环境段
name = "my-worker"
main = "src/index.js"
compatibility_date = "2026-01-01"
[vars]
SITE_NAME = "开发环境"
[env.production]
vars = { SITE_NAME = "生产环境" }
部署到指定环境
# 默认环境
wrangler deploy
# 生产环境
wrangler deploy --env production
对应的,密钥也可以分环境设置
wrangler secret put API_KEY --env production
多环境方案能避免”改完代码忘记切换配置”这类低级事故,是团队协作的标配。
安全建议清单
收尾总结几条必须遵守的规则
| 规则 | 说明 |
|---|---|
| 代码里禁止出现真实密钥 | 用占位名代替 |
| 密钥只用 secrets 管理 | 仪表盘和 wrangler secret 均可 |
| .dev.vars 加入 .gitignore | 防止本地密钥泄漏到仓库 |
| 密钥泄露立即轮换 | 在第三方平台重新生成并更新 |
| 不同环境用不同密钥 | 避免开发环境共享生产密钥 |
至此基础设施部分结束。从下一篇开始进入数据存储,先学 KV 分布式键值存储。
上一篇 Cloudflare Workers 路由与 API 开发
下一篇 Cloudflare Workers KV 存储