跳到主要内容

Cloudflare 速查表

本文档提供 Cloudflare 常用命令、配置和代码片段的快速参考。

DNS 记录类型

类型用途示例
A指向 IPv4 地址@ → 192.0.2.1
AAAA指向 IPv6 地址@ → 2001:db8::1
CNAME指向另一个域名www → example.com
MX邮件服务器@ → mail.example.com
TXT文本记录SPF、验证等
NS域名服务器@ → ns1.cloudflare.com

SSL/TLS 模式

模式用户→CFCF→源站适用场景
FlexibleHTTPSHTTP源站无证书
FullHTTPSHTTPS源站有自签名证书
Full (Strict)HTTPSHTTPS + 验证生产环境推荐

Wrangler 常用命令

认证与配置

# 登录
wrangler login

# 查看当前用户
wrangler whoami

# 初始化项目
npm create cloudflare@latest my-project

Workers 操作

# 本地开发
npx wrangler dev

# 部署
npx wrangler deploy

# 查看日志
npx wrangler tail

# 查看部署列表
npx wrangler deployments list

KV 操作

# 创建命名空间
npx wrangler kv:namespace create MY_KV

# 写入数据
npx wrangler kv:key put --binding=MY_KV "key" "value"

# 读取数据
npx wrangler kv:key get --binding=MY_KV "key"

# 列出键
npx wrangler kv:key list --binding=MY_KV

# 删除数据
npx wrangler kv:key delete --binding=MY_KV "key"

R2 操作

# 创建存储桶
npx wrangler r2 bucket create my-bucket

# 列出存储桶
npx wrangler r2 bucket list

# 上传文件
npx wrangler r2 object put my-bucket/file.txt --file=./local-file.txt

# 下载文件
npx wrangler r2 object get my-bucket/file.txt --file=./local-file.txt

# 删除文件
npx wrangler r2 object delete my-bucket/file.txt

D1 操作

# 创建数据库
npx wrangler d1 create my-database

# 列出数据库
npx wrangler d1 list

# 执行 SQL 文件
npx wrangler d1 execute my-database --file=./schema.sql

# 执行单条 SQL
npx wrangler d1 execute my-database --command "SELECT * FROM users"

# 导出数据
npx wrangler d1 export my-database --output=backup.sql

Pages 操作

# 部署静态站点
npx wrangler pages deploy ./dist

# 指定项目名称
npx wrangler pages deploy ./dist --project-name=my-site

# 本地开发
npx wrangler pages dev ./dist

Tunnel 操作

# 登录
cloudflared tunnel login

# 创建隧道
cloudflared tunnel create my-tunnel

# 列出隧道
cloudflared tunnel list

# 运行隧道
cloudflared tunnel run my-tunnel

# 配置 DNS
cloudflared tunnel route dns my-tunnel subdomain.example.com

# 删除隧道
cloudflared tunnel delete my-tunnel

Workers 代码片段

基本结构

export default {
async fetch(request, env, ctx) {
return new Response('Hello World!');
},
};

JSON 响应

return Response.json({ message: 'Hello', data: [] });

路由处理

const url = new URL(request.url);
const path = url.pathname;

if (path === '/api/users') {
return handleUsers(request, env);
}

KV 操作

// 写入
await env.MY_KV.put('key', 'value');
await env.MY_KV.put('key', JSON.stringify(data));

// 读取
const value = await env.MY_KV.get('key');
const data = await env.MY_KV.get('key', 'json');

// 删除
await env.MY_KV.delete('key');

// 列出
const result = await env.MY_KV.list({ prefix: 'user:' });

R2 操作

// 上传
await env.MY_BUCKET.put('file.txt', fileContent, {
httpMetadata: { contentType: 'text/plain' }
});

// 下载
const object = await env.MY_BUCKET.get('file.txt');
const content = await object.text();

// 删除
await env.MY_BUCKET.delete('file.txt');

// 列出
const result = await env.MY_BUCKET.list();

D1 操作

// 查询所有
const result = await env.DB.prepare(
'SELECT * FROM users'
).all();

// 参数化查询
const user = await env.DB.prepare(
'SELECT * FROM users WHERE id = ?'
).bind(1).first();

// 插入
const result = await env.DB.prepare(
'INSERT INTO users (name, email) VALUES (?, ?)'
).bind('John', '[email protected]').run();

// 批量操作
await env.DB.batch([
env.DB.prepare('INSERT INTO users (name) VALUES (?)').bind('A'),
env.DB.prepare('INSERT INTO users (name) VALUES (?)').bind('B'),
]);

CORS 处理

const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
};

if (request.method === 'OPTIONS') {
return new Response(null, { headers: corsHeaders });
}

return new Response('Hello', { headers: corsHeaders });

缓存

const cache = caches.default;
const cached = await cache.match(request);

if (cached) {
return cached;
}

const response = await fetch(request);
ctx.waitUntil(cache.put(request, response.clone()));
return response;

Pages 配置

_redirects 文件

# 重定向
/old /new 301

# SPA 路由
/* /index.html 200

# 代理
/api/* https://api.example.com/:splat 200

_headers 文件

/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff

/assets/*
Cache-Control: public, max-age=31536000

wrangler.toml 配置

name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"
account_id = "your-account-id"

[vars]
ENVIRONMENT = "production"

[triggers]
crons = ["0 * * * *"]

[[kv_namespaces]]
binding = "MY_KV"
id = "your-kv-id"

[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "my-bucket"

[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "your-database-id"

常用 HTTP 状态码

状态码说明Cloudflare 场景
200成功正常响应
301永久重定向URL 重定向
302临时重定向临时跳转
400请求错误无效请求
403禁止访问WAF 拦截
404未找到资源不存在
429请求过多速率限制
500服务器错误源站错误
502网关错误源站不可达
503服务不可用维护中
504网关超时源站超时

缓存状态码

状态说明
HIT缓存命中
MISS缓存未命中
EXPIRED缓存过期
STALE过期但仍返回
BYPASS绕过缓存
REVALIDATED已重新验证

Cloudflare IP 范围

获取 Cloudflare IP 列表:

# IPv4
curl https://www.cloudflare.com/ips-v4

# IPv6
curl https://www.cloudflare.com/ips-v6

常用公共 DNS

服务商IPv4IPv6
Cloudflare1.1.1.1, 1.0.0.12606:4700:4700::1111
Google8.8.8.8, 8.8.4.42001:4860:4860::8888
Quad99.9.9.92620:fe::fe

参考链接