使用CF Workers 优选反代 EMBY 傻瓜级教程
本教程转载自 https://telegra.ph/CF-Workers-Reverse-Proxy-01-17
NOTE本教程提供了一种通过Cloudflare Workers实现EMBY服务器优选反代的方法,可以有效提升访问速度。
前期准备
TIP在开始之前,请确保你已经准备好了以下物品:
- CloudFLare账号
- 托管在Cloudflare上面的域名
WARNING同一个反代建议不要给很多人用,否则流量过大可能违反CF的政策导致被封号。建议小范围自用。
没有域名的可以看这篇,白嫖一个: https://zhuanlan.zhihu.com/p/1932505765198926962
第一步: 部署代码
首先打开Cloudflare面板,在左侧菜单找到 Workers 和 Pages,点击 创建应用程序,模板选Hello word 开始新建一个Worker。

点击 编辑代码,将原有的代码全部删除,粘贴以下代码。
WARNING粘贴后,请务必修改代码顶部的 target 这一行,填入你自己想要反代的Emby服务器地址和端口。
const myConfig = { target: "https://你的emby地址:端口号", enableCors: true,};
export default { async fetch(req, env, ctx) { const u = new URL(req.url); const t = new URL(myConfig.target); u.protocol = t.protocol; u.hostname = t.hostname; u.port = t.port; const h = new Headers(req.headers); h.set("Host", t.hostname); if (h.has("Referer")) h.set("Referer", myConfig.target); if (h.has("Origin")) h.set("Origin", myConfig.target); const r = new Request(u.toString(), { method: req.method, headers: h, body: req.body, redirect: "follow", });
try { const res = await fetch(r); const rh = new Headers(res.headers); if (myConfig.enableCors) { rh.set("Access-Control-Allow-Origin", "*"); rh.set( "Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS", ); rh.set("Access-Control-Allow-Headers", "*"); }
return new Response(res.body, { status: res.status, statusText: res.statusText, headers: rh, }); } catch (err) { return new Response(err.message, { status: 502 }); } },};点击右上角的 部署 (Deploy) 按钮保存。
TIP可以去找在线Javascript混淆加密处理一下防止被CF特征识别。
第二步: 域名CNAME优选
打开你托管在Cloudflare的域名管理页面,进入 DNS 记录。
添加一条 CNAME 记录:
- 名称: 填写你想要的前缀(例如 emby)
- 目标: 填写一个优选域名
WARNING务必关闭 “代理状态”
优选域名可以在这里选: https://cf.090227.xyz/

第三步: 配置路由
这是最关键的一步,让你的域名流量经过刚才创建的Worker。
- 在你的域名管理页面左侧菜单栏,点击 Workers 路由 (Workers Routes)。

- 点击 添加路由。
路由一栏输入:
第二步添加记录的名称.你的域名/*例如: emby.你的域名.com/*
WARNING注意!!! 一定要带上/*

Worker 一栏选择你第一步创建的那个Worker,然后点击保存。
NOTE本教程的优选域名方式也可以用于其它功能的workers,反代代码也可以用于emby服务器以外的网站,想要个性化的功能可以让AI帮你写代码
结束
现在打开你在DNS设置的那个域名(例如 https://emby.你的域名.com),应该就可以直接访问你的Emby了,并且走的是优选线路。
TIP补充: 反代需要使用国内dns解析,否则可能连不上,如果你有同时使用代理软件,请自行添加规则,把你自己的域名走直连,并且DNS要用国内的
TIP补充: 在播放器上,服务器端口可以不填(默认443),也可以填
443、2053、2083、2087、2096、8443
使用其它端口也许可以在晚高峰提升速度(我不确定)。本方式搭建的反代,使用hills的可以直接在它的服务器线路中添加
进阶
NOTE如果你有多个Emby服务器,想要通过同一个优选域名访问(例如用 /server1 访问第一台,/server2 访问第二台),懒得每个服务器都开一个workers, 可以使用下面的代码。
操作方法
将Worker中的代码全部替换为以下内容,并修改顶部的配置区域。
const mapCfg = { paths: { "/server1": "https://你的第一台emby地址:端口", "/server2": "https://你的第二台emby地址:端口", }, main: "https://你的默认emby地址:端口", cors: true,};
export default { async fetch(req, env, ctx) { const rawUrl = new URL(req.url); let target = mapCfg.main; let prefix = ""; for (const key in mapCfg.paths) { if (rawUrl.pathname.startsWith(key)) { target = mapCfg.paths[key]; prefix = key; break; } }
let cleanPath = rawUrl.pathname; if (prefix) { cleanPath = cleanPath.replace(prefix, ""); if (cleanPath === "" || !cleanPath.startsWith("/")) { cleanPath = "/" + cleanPath; } }
const tUrl = new URL(target); const finalUrl = new URL(cleanPath + rawUrl.search, tUrl); const h = new Headers(req.headers); h.set("Host", tUrl.host); if (h.has("Referer")) h.set("Referer", target); if (h.has("Origin")) h.set("Origin", target); const newReq = new Request(finalUrl.toString(), { method: req.method, headers: h, body: req.body, redirect: "follow", });
try { const res = await fetch(newReq); const resH = new Headers(res.headers); if (mapCfg.cors) { resH.set("Access-Control-Allow-Origin", "*"); resH.set( "Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS", ); resH.set("Access-Control-Allow-Headers", "*"); }
return new Response(res.body, { status: res.status, statusText: res.statusText, headers: resH, }); } catch (err) { return new Response(err.message, { status: 502 }); } },};使用说明
- 修改
paths中的内容,左边是路径前缀,右边是对应的服务器地址。 - 修改
main中的地址,这是直接访问域名(不带前缀)时连接的默认服务器。 - 在Emby客户端填入地址时:
- 访问默认服务器填:
https://emby.你的域名.com - 访问其他服务器填:
https://emby.你的域名.com/server1(对应代码里设置的前缀)
- 访问默认服务器填:
部分信息可能已经过时









