在 Cloudflare Workers 上轻松部署反向代理
Cloudflare Workers 是一个运行在 Cloudflare 边缘网络上的无服务器平台,非常适合用来搭建轻量级的反向代理服务。本文将详细介绍如何在 Cloudflare Workers 上快速部署反向代理代码,帮助你实现流量转发、请求改写等功能。
一、准备工作
- 你需要一个 Cloudflare 账户,并添加至少一个域名。
熟悉基础的 Cloudflare 控制台操作。
目标被代理的域名(如 example.com)。
二、步骤详解
1. 登录 Cloudflare 控制台
1. 访问 [Cloudflare Dashboard](https://dash.cloudflare.com) 并登录。
2. 选择你管理的任意域名,或者直接使用 Workers 独立运行。
2. 创建 Worker
1. 在左侧导航栏选择 **Workers & Pages > Overview**。
2. 点击 **Create Application**,然后选择 **Create Worker**。
3. 你将进入 Worker 代码编辑页面。
3. 编写反向代理代码
在编辑器中粘贴以下代码:
addEventListener("fetch", event => {
let url = new URL(event.request.url);
url.hostname = "example.com"; // 替换为你的目标域名
let request = new Request(url, event.request);
event.respondWith(fetch(request));
});
这段代码会拦截所有请求,将请求的目标域名改为你指定的目标域,并将请求转发。
4. 通过路由添加优选域名(推荐方式)
创建完 Workers 后,你可以 不用添加自定义域名,而是添加路由,例如:
<TEXT>example.yourdomain.com/*
然后去 DNS 管理页添加一个 CNAME 记录:
- 前缀:使用你刚才添加的路由前缀(这里是
example
) - 目标:指向优选域名(即你想代理的目标域名)
这样,实际上是给项目变相地添加了优选域名,简化了自定义域名配置的流程。
5. 配置自定义域名(可选)
如果你想通过自己绑定的域名访问代理:
- 在 Worker 页面点击 Triggers > Custom Domains。
- 添加你的自定义域名,例如
proxy.yourdomain.com
。 - 按照提示配置对应的 DNS 记录(一般为 CNAME 指向 Cloudflare Workers 地址)。
- 完成绑定后即可通过自定义域名访问代理服务。
6. 测试与部署
- 点击 Save and Deploy 按钮,将代码发布。
- 通过 Worker 默认提供的域名访问,例如:<TEXT>
https://your-worker.your-subdomain.workers.dev
- 页面应返回目标网站(example.com)的内容,表示代理生效。
三、高级配置示例
1. 针对特定路径代理并添加路径前缀
假设只想代理 /api
路径,可以改写请求路径:
<JS>addEventListener("fetch", event => { let url = new URL(event.request.url); url.hostname = "example.com"; url.pathname = "/api" + url.pathname; // 给路径添加前缀 /api let request = new Request(url, event.request); event.respondWith(fetch(request));});
2. 保留并修改请求头(如 Host)
部分后台服务依赖请求中的 Host 头,需要强制指定:
<JS>addEventListener("fetch", event => { let url = new URL(event.request.url); url.hostname = "example.com"; let headers = new Headers(event.request.headers); headers.set("Host", "example.com"); // 强制设置目标 Host let request = new Request(url, { method: event.request.method, headers: headers, body: event.request.body, redirect: "manual" }); event.respondWith(fetch(request));});
3. 使用环境变量避免硬编码
在 Worker 的 Settings > Variables 中配置:
<JS>export default { async fetch(request, env) { let url = new URL(request.url); url.hostname = env.TARGET_DOMAIN; // 通过环境变量传入目标域名 let req = new Request(url, request); return fetch(req); }};
四、验证代理是否工作
- 打开代理地址,如:<TEXT>
https://your-worker.your-subdomain.workers.dev
- 你应能看到目标网站(example.com)的内容。
- 也可以用
curl
命令测试:<BASH>curl -v https://your-worker.your-subdomain.workers.dev
五、注意事项
1. 目标域名限制
- 如果目标域名也托管在 Cloudflare,确保关闭代理(设置 DNS 记录为灰色云),以避免循环代理。
- 有些目标站点可能启用防火墙或 CORS 策略,导致代理请求失败,此时需要调整目标服务器配置。
2. 性能优化
- Cloudflare Workers 有资源限制(CPU 时间、内存)。
- 高流量场景建议合理拆分功能和请求路径,避免超时和资源不足。
3. 安全性
- 避免暴露敏感后端接口。
- 可以利用 Worker 的路由过滤功能控制访问来源。
- 需要鉴权、缓存等复杂需求时,请参考 Cloudflare Workers 文档 实现。
总结
借助 Cloudflare Workers,部署一个轻量级反向代理变得异常简单且高效。只需几行代码和几步配置,就能让你的请求通过 Cloudflare 边缘网络转发到指定后端。无论是跨域请求、请求重写还是简单负载均衡,Workers 都是一个极佳的选择。
Comments NOTHING