用CloudFlare的workers反代网站或项目

admin 發布於 2025-07-08 13 次瀏覽


在 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. 配置自定义域名(可选)

如果你想通过自己绑定的域名访问代理:

  1. 在 Worker 页面点击 Triggers > Custom Domains
  2. 添加你的自定义域名,例如 proxy.yourdomain.com
  3. 按照提示配置对应的 DNS 记录(一般为 CNAME 指向 Cloudflare Workers 地址)。
  4. 完成绑定后即可通过自定义域名访问代理服务。

6. 测试与部署

  1. 点击 Save and Deploy 按钮,将代码发布。
  2. 通过 Worker 默认提供的域名访问,例如:<TEXT>https://your-worker.your-subdomain.workers.dev
  3. 页面应返回目标网站(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 都是一个极佳的选择。