𝙈𝙖𝙠𝙠𝙖𝙋𝙖𝙠𝙠𝙖 Emby 反代面板
一个部署在 Cloudflare Workers 上的 Emby 反代节点管理面板:集中管理多个 Emby 源站的反代节点,支持添加/编辑/删除节点、切换反代模式、全局测速、DNS 管理、流量统计、数据大屏,还带订阅者只读模式、节点申请审核和多级权限体系。
单文件 Worker,登录页 + 管理面板全部在一个 worker.js 里,复制粘贴就能部署,不需要任何构建。
当前版本 v3.4.28:订阅用户「可添加节点」权限(逐用户开通,开通后可直接添加节点无需审核,未开通看不到添加按钮;订阅用户始终不能查看源站线路/编辑/删除)+ 成员添加节点记录(子管理员与授权订阅用户添加节点自动留存记录,可查可搜)+ 公告单条覆盖(发新公告自动作废旧公告,子管理员/订阅用户每次进入面板必看、停留 3 秒后可关闭)+ 节点添加申请自动留存申请记录(账户设置可查可搜)+ 公告系统(管理员设置,子管理员/订阅用户进入面板自动弹出)+ 子管理员角色(查看节点 + 审核并直接添加节点,不能编辑/删除/测速/DNS)+ 「禁裸域名访问」安全开关 + 订阅用户节点申请与管理员审核(支持多备用线路、同线路自动替换)+ 预设优选源 30 源 + 四源并发聚合 + EMOS 专用反代模式 + 播放热力图 + 保号提醒提前预警
写在前面
- 频道: 𝙈𝙖𝙠𝙠𝙖𝙋𝙖𝙠𝙠𝙖’𝙨 𝘾𝙝𝙖𝙣𝙣𝙚𝙡
- 群组: 𝙈𝙖𝙠𝙠𝙖𝙋𝙖𝙠𝙠𝙖’𝙨 𝙂𝙧𝙤𝙪𝙥
- 不懂的进群提问即可,详细图文教程,群内回复关键词:教程
- 不允许反代的服务器就不要反代了,影响他人体验。
准备阶段
-
Cloudflare 账号 Cloudflare Dashboard | Manage Your Account(没有账号自行注册登录即可)
-
一个域名 立即注册 - DNSHE(推荐这个免费域名即可,也可以用自己的域名)
-
明文源码 来TG群找
部署步骤(手动部署到 Cloudflare)
1. 创建 Worker
- 打开 Cloudflare 控制台 → 左侧菜单 Workers & Pages → Create application → Create Worker(创建空白 Worker)
- 给 Worker 起个名字(比如
emby-proxy-panel),点 Deploy
2. 创建 D1 数据库
面板的节点、统计、订阅者数据都存在 D1(Cloudflare 原生 SQLite):
- 左侧菜单 Workers & Pages → D1 → Create database
- 名字随意(比如
emby-proxy-db) - 创建好后进入数据库 → Bindings → Add binding:
- 变量名填:
DB(必须叫这个,代码读的就是env.DB) - 选刚创建的数据库 → Save
- 变量名填:
不用手动建表,首次访问时代码会自动建好
routes、request_stats、visitor_logs、app_config四张表。
3. 配置环境变量(Settings → Variables)
| 变量名 | 必填 | 说明 |
|---|---|---|
ADMIN_TOKEN | ✅ 必填 | 管理员登录密码(最高权限,永远有效) |
CF_API_TOKEN | 选填 | CF API Token(流量统计 / DNS 管理 / 区域调度用),按下面「API Token 权限配置」创建 |
CF_ZONE_ID | 选填 | 你域名的 Zone ID |
CF_DOMAIN | 选填 | 你的反代域名 |
TG_BOT_TOKEN | 选填 | Telegram Bot Token(保号提醒推送;BotFather 创建机器人获取) |
TG_CHAT_ID | 选填 | 管理员 Chat ID(保号提醒推送目标;userinfobot 获取) |
BARK_KEY | 选填 | Bark 设备 Key(iOS 系统级推送保号提醒;App 首页 api.day.app/ 末尾) |
BARK_LEVEL | 选填 | Bark 推送级别:active(默认)/ timeSensitive / critical / passive |
API Token 权限配置(按此创建,三个区域与我一致)
1. 权限(Permissions)
| 权限类型 | 资源 | 权限 |
|---|---|---|
| 账户 Account | Workers 脚本 Worker Scripts | 编辑 Edit |
| 区域 Zone | 区域设置 Zone Settings | 读取 Read |
| 区域 Zone | 清除缓存 Cache Purge | 清除 Purge |
| 区域 Zone | DNS | 编辑 Edit |
| 区域 Zone | Analytics | 读取 Read |
2. 账户资源(Account Resources):选择 包括 Include → 勾选你的账号(你的邮箱@gmail.com)
3. 区域资源(Zone Resources):选择 包括 Include → 特定区域 Specific zone → 勾选你的反代域名区域
4. 客户端 IP 地址筛选:默认不设置(留空即可)
不配
CF_API_TOKEN那些,流量统计、DNS、区域调度用不了,但节点反代、登录、订阅者模式照常能用。。
4. 粘贴代码并部署
- 进入 Worker → Edit code
- 把编辑器里默认代码全选删掉
- 把本仓库 worker.js 的内容全部复制粘贴进去
- 点右上角 Deploy
5. 绑定域名
Worker → Settings → Domains & Routes → Add,在worker域界面,选择添加路由输入你的反代域名(需已接入 CF DNS)。去到Cloudflare 域名概览界面,选择你刚刚添加到worler的域名,点击DNS记录,添加一条CNAME记录,前缀填你刚刚自定义的前缀,关闭小黄云,目标填入:saas.sin.fan
6. 登录
- 访问
https://你的worker名.你的子域.workers.dev(或自定义域名) - 输入
ADMIN_TOKEN设的密码登录 - 点顶部 logo → 账户设置:可改网页密码、添加订阅者密码(分享给朋友)
安卓 App(保号提醒)
面板配套安卓原生 App(release/EmbyProxyApp_cf-normal_v1.0.3.apk),CF 普通版专用:
- 独立原生深色 UI(非网页壳),输入面板地址 + 管理员密钥(
ADMIN_TOKEN)即可连接 - 节点卡片实时展示未观看天数 / 观看下限 / 还剩几天,超限红色告警、即将超限黄色预警
- 超过观看下限未观看 → App 本地自动检测并弹系统通知提醒保号(无需 Bark/TG)
- 支持在 App 内直接编辑节点的观看下限
- 默认地址留空,不内置任何面板地址
功能特性
- 节点管理:添加/编辑/删除节点,每条节点支持主线路 + 多条备用源站线路(主源挂掉自动切换)
- 反代模式:
保守(抹除IP)/严格/兼容/强力/EMOS(专用头)一键切换 - 播放热力图(v3.4.16+):数据大屏顶部展示近 7 天 × 24 小时的播放热度格子,真实播放请求自动按「节点 × 日期 × 小时」累计(D1
play_hits),保活/内部直连天然不计入 - 节点操作:拖拽排序、批量应用模式、按备注/后缀搜索、直达链接一键复制、节点展开/收起
- 测速与 DNS:全局测速、单节点延迟检测、动态 DNS 管理(自定义 API IP、远程 IP)、预设优选源 30 源分组选择(云枢全域/104/162/172/198/108/IPv6 霄汉星轨/第三方备用,选中即显示名字+标识+API 地址可复制)
- 安全(禁裸域名访问):账户设置 → 安全,可一键关闭「裸域名直连代理」——关闭后
/域名/任意URL式白嫖访问直接 403,仅节点前缀可访问,不影响任何节点(含后端推流地址与线路不同的服),反代 Token 开启时仍按/密钥/节点后缀工作 - 节点申请审核:订阅用户可提交「节点名字 + 主线路 + 无数条备用线路」申请;后端按域名自动去重(与现有节点对比提示已存在;与待审申请命中同一域名自动替换为新申请);管理员顶部头像区「节点申请」按钮带未读角标,同意后跳转添加节点页自动填主线路与备用线路,拒绝即删除申请
- 数据统计:24h/7天/30天流量(CF GraphQL 精准取数)、真实观看次数(今日/累计,播放会话去重)、访客日志、数据大屏
- 真实观看判定(EmbyBOSS 思路):不再把详情页/预加载的
PlaybackInfo当成播放,改判播放会话心跳链(播放开始 + 非暂停的进度心跳),播放次数按会话去重,统计真实不虚高 - 未观看天数 + 观看下限报警:节点卡片显示距上次真实观看的天数;每节点可独立设置观看下限,超限未观看卡片自动红色报警
- 手动覆盖/更新:粘贴代码或上传文件覆盖 Worker 核心代码(提交前二次确认)
- 调度与区域:Worker 调度模式(智能/边缘/云厂商/手动)与区域设置
- 备份恢复:一键导出全部配置为 JSON / 导入恢复
- 深色/浅色模式、版本自动检测更新
IP 访问控制(白名单 / 黑名单 / 国家封锁)
设置页 → IP 访问控制 卡片(管理员可见):
- 模式:关闭 / 白名单(仅命中放行)/ 黑名单(命中跳转)
- IP 列表:每行一个 IP 或 CIDR 网段(如
1.2.3.4、5.6.7.0/24),支持 IPv4/IPv6 - 国家列表:每行一个 ISO 两位国家码(如
US、RU、CN),支持按国家整体封锁;IP 命中或国家命中即算命中 - 跳转网址:被拦截时 302 跳转到该地址;不填则显示「你的 IP 已被禁用」页面
- 拦截范围:面板页面与所有节点链接统一生效(改配置前注意别把自己锁外面)
管理员逃生入口 /entry(逃生通道,永不拦截):
- 只认
ADMIN_TOKEN环境变量密码(不受反代 Token 模式影响) - 登录成功后当前 IP 自动加入最高白名单,任何模式下都放行面板与节点
- 最高白名单可在设置页与 /entry 就地增删(共享节点的他人 IP 可随时移除)
- 与伪装版一致:面板登录 没有 cookie 逃生——不在名单内的请求一律拦截,只能通过 /entry 恢复
保留后缀校验:反代密钥不能使用 entry / api / catch / speedtest / __client_rtt__ / favicon.ico 等系统保留路径。
反代 Token 门禁(D1 存储)
账户弹窗内可开启「反代 Token」并设置 3-32 位字母数字密钥:
- 开启后所有节点 / 302 / 改写链接需带
/密钥/前缀才可反代; - 直接访问不带密钥的路径会 302 跳转
/catch,页面显示"宝贝抓到你了"并展示来访 IP / UA; - 来访记录存入 D1 的
proxy_hits表(不占用 KV 免费额度),面板内可查看 / 清空; - 未登录无法读取 Token 配置(401);关闭开关立即恢复无前缀模式。
一键导入播放器(SenPlayer / Rex / Hills)
节点卡片 → 一键导入 按钮,弹窗内生成三种播放器导入链接,凭据默认取节点账号(编辑节点时填写「节点账号/节点密码」),可在弹窗内临时修改:
- SenPlayer:
senplayer://importserver?type=emby&name=名称&address=https://域名/前缀&username=账号&password=密码 - Rex:
rex://import?type=emby&scheme=https&host=域名/前缀&port=443&username=账号&password=密码&title=名称 - Hills:
hills://import?type=emby&scheme=https&host=域名/前缀&port=443&username=账号&password=密码
在播放器「链接导入」粘贴链接,或直接点「打开」唤起。前缀自动拼入地址/主机,直达对应节点。
权限体系(三级)
| 角色 | 登录方式 | 权限 |
|---|---|---|
| 管理员(变量密码) | ADMIN_TOKEN | 最高权限,永不失效,任何时候都能进面板 |
| 管理员(网页密码) | 账户设置里改的密码 | 与变量密码同级;可在此管理订阅者(添加/删除订阅者密码) |
| 订阅者 | 管理员添加的订阅者密码 | 只读:只能看节点和直达链接;不能增删改节点、不能测速/DNS、不能进设置、不能更新/导入导出/改区域;源站链接完全隐藏(前端隐藏 + 后端剥离,调接口也拿不到) |
⚠️
ADMIN_TOKEN是最高权限密码:网页端改密码后它照样能进面板。忘记网页密码?用ADMIN_TOKEN登录重新改就行。
使用说明
添加第一个节点
- 节点页 → + 添加节点
- 填写:
- 前缀路径:访问路径(如
youno,访问链接 =https://你的域名/youno) - 主线路地址:Emby 源站地址(如
http://1.1.1.1:8096),可逗号分隔加多条备用线路 - 反代模式:默认「保守(抹除IP)」
- 前缀路径:访问路径(如
- 提交,然后访问
https://你的域名/前缀就是反代后的媒体库
分享给订阅者
- 管理员登录 → 顶部 logo → 账户设置 → 管理用户
- 添加订阅者密码(4 位以上)
- 订阅者用该密码登录 = 只读模式,只能看节点、复制直达链接,看不到任何源站信息
- 订阅者可在节点列表页点「申请节点」,提交节点名字 + 线路地址;若线路已存在会直接提示已有节点(名字/后缀),无需重复申请;管理员审核同意后节点自动进入添加页待你改名保存
禁裸域名访问开关(账户设置 → 安全,v3.4.22+)
默认开启(与历史行为一致):/域名/https://任意URL 这类裸访问会被反代(方便自用)。
关闭后:
/域名/https://...、/域名/http://...开头的裸直连代理一律返回 403- 已配置的节点前缀(
/节点后缀/...)完全不受影响——包括后端推流地址、与服主线路不同的靶线路 - 反代 Token 开启时,节点链接仍按
/密钥/节点后缀工作,逻辑不变
节点申请与审核(v3.4.22+)
- 订阅者:节点列表页右上「申请节点」→ 填节点名字 + 线路地址 → 提交。后端按域名与现有节点、已有申请双向去重:线路已存在 → 提示「已存在该节点(名字/后缀)」;已有人申请同线路 → 提示等待审核
- 管理员:顶部头像区新增「节点申请」按钮(带未读数角标)→ 浮窗逐条展示申请(名字/线路/时间)→ 点「同意」自动跳转添加节点页并预填好线路地址与名字,只需改短路径后缀后保存;点「拒绝」该申请从 D1 删除
- 申请数据存 D1
node_requests表(自动建表,按域名去重)
子管理员(v3.4.25+)
- 设置:管理员 → 左上角头像 → 账户设置 →「子管理员用户区」设置/清除子管理员密码;子管理员用该密码在登录页登录(认证优先级:管理员 > 子管理员 > 订阅用户)
- 权限:可查看节点、可审核(通过/拒绝)用户的节点添加申请;点「同意」自动跳转添加节点页并预填线路/名字,填短路径后缀保存后节点直接上架
- 边界:不能编辑现有节点、不能删除节点、不能测速/DNS/IP 白名单/改配置/管理订阅者;前端隐藏编辑/删除/管理入口,后端双重拦截(编辑请求带 oldPrefix 直接 403、删除接口仅管理员)
预设优选源(测速与 DNS 页,v3.4.21+)
「提取预设源并测速」下拉内置 30 个优选源,按家族分组:云枢全域与三网专线(全域融合/移动/电信/联通)、104/162/172 大段家族、198&108 专线、IPv6 霄汉星轨家族(全域/移动5G/电信美西/联通欧日/2400/2606/2a06 等 12 源)、第三方备用源(@robberer / CM佬三网 / v2too)。
- 每个源显示「名字 · 标识」;选中后下方详情条展示完整 API 地址,点击一键复制
- 综合混合源后端四源并发聚合(uouin + cf-speed-dns + 164746 + wetest)
- 测速页按「预设优选源 / 自定义API与手动粘贴 / DNS 应用」三块卡片分区;输入框深色模式暗底亮字、白天模式淡底暗字,两种主题均可读
EMOS 专用反代模式(v3.4.18+)
适配 emos.dpdns.org/proxy 特殊服的专用模式,节点反代模式选 EMOS 即可:
- 自动携带两枚 EMOS 头:
EMOS-PROXY-ID(你的用户 ID,形如eABCDEFGHs)+EMOS-PROXY-NAME(你的称号) - 强制透传真实 IP:
X-Forwarded-For自动取访客真实 IP(忽略模拟 IP 伪装) - Range/206 全程透传:不缓冲,拖进度条正常
- 内置默认身份(v3.4.19+):ID 与称号默认已内置,可直接使用;节点编辑弹窗里可随时修改覆盖,不强制
- 中文称号等特殊字符自动安全编码,不会导致反代中断
配置步骤:添加/编辑节点 → 反代模式选 EMOS → 目标地址填 EMOS 源站(建议 https://video.emos.best)→ 保存。
自测:访问 <你的地址>/<前缀>/system/ext/proxy/test,is_bind: true 且 proxy_id/proxy_name 显示你的 ID 和称号即生效。
真实观看统计与观看下限(改良版判定)
- 面板只把「真正开始播放」记为观看:拦截 Emby 播放会话(
Sessions/Playing播放开始 + 非暂停的Sessions/Playing/Progress进度心跳),详情页/预加载的PlaybackInfo不再计入,消除虚高 - 同一播放会话只计一次有效播放(今日/累计播放次数),同一会话的心跳风暴不会刷次数
- 节点卡片「最后活跃」显示距上次真实观看的天数(如
3 天前观看);没记录显示「暂无播放记录」 - 节点编辑弹窗 → 观看下限(天)(如
7 / 14 / 21,0= 不限制):设置后超过该天数未观看,卡片自动红色报警(⚠️ 已超 X 天)
保号提醒(提前预警 v3.4.17+)
- 设置了观看下限的节点,在到期前 3 天 / 前 2 天 / 前 1 天 / 当天各提醒一次(此前为超限才提醒,容易来不及)
- 文案分档:
剩余 N 天到期/今天到期,请立即观看/已超限 N 天 - 播放即停:节点在提醒后已有真实观看 → 自动退出提醒、重新进入观看下限倒计时,不再重复打扰
- 每天每节点最多一条;推送成功才记录(失败 6 小时后自动重试,不丢提醒)
- 推送渠道:Bark(配
BARK_KEY)+ Telegram(配TG_BOT_TOKEN/TG_CHAT_ID),面板内也会弹出提醒 toast
面板内配置(v3.3.2+):网页右上角头像 → 账户设置 → 保号提醒通知(Bark / Telegram) 区域,可直接填写 Bark Key / 级别、TG Token / Chat ID、启停开关并保存(无需改环境变量,保存在 D1),还有 测试 Bark / 测试 TG 按钮立即验证;留空不修改已有配置。环境变量仍优先于面板配置。
💡 保号提醒 App v1.0.3:设置页已升级为真实通知配置表单——直接填写 Bark Key/级别、TG Token/Chat ID 并保存(走
/api/config),支持「测试 Bark / 测试 TG」按钮即时验证;无需再依赖环境变量。
更新面板代码
底部导航 → 控制面板 → 手动覆盖/更新:粘贴最新代码全文或上传 worker.js 文件 → 覆盖更新。
⚠️ 提交错误代码会导致面板崩溃(500),先本地验证。
数据存储(D1 表结构)
| 表名 | 用途 |
|---|---|
routes | 反代节点(prefix / target / mode / remark / icon / cache_img / sort_order) |
request_stats | 每日播放请求统计(prefix + date) |
visitor_logs | 访客日志(IP / 国家 / UA,自动清理 7 天前数据) |
app_config | 面板配置(网页管理员密码、订阅者列表、反代 Token、裸域名开关) |
node_requests | 订阅者节点申请(name / url / domain / status,按域名去重) |
绑定名必须为
DB,否则面板不工作。
常见问题
Q:页面提示「请在 Worker 变量中配置 ADMIN_TOKEN」?
A:没配 ADMIN_TOKEN 环境变量,去 Settings → Variables 加上重新部署。
Q:订阅者登录后「读取失败」?
A:确认用的是本仓库最新版代码(旧版存在接口 500 bug),且 D1 绑定名正确是 DB。
Q:流量统计显示「获取异常」?
A:检查 CF_API_TOKEN / CF_ZONE_ID 配置,Token 权限是否含 Analytics: Read。
Q:突然所有 /https:// 裸访问都 403 了?
A:账户设置 → 安全 里「允许裸域名直连代理」被关了。把它打开即恢复;只影响裸访问,不影响节点。
Q:反代节点访问不了? A:确认源站地址可达、域名 DNS 已解析到 Worker(先用 workers.dev 地址测试)。
Q:忘记网页登录密码?
A:用 ADMIN_TOKEN 环境变量密码登录(永远有效),进 logo → 账户设置重新改。
免责声明
本项目仅供学习与技术测试使用。请遵守当地法律法规与各平台服务条款,开发者不对任何信息造成的后果承担责任。请勿将本项目用于侵犯他人版权或未经授权的访问行为。