跳到主要内容

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', 'john@example.com').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

参考链接​