Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

𝙈𝙖𝙠𝙠𝙖𝙋𝙖𝙠𝙠𝙖 Emby 反代面板

一个部署在 Cloudflare Workers 上的 Emby 反代节点管理面板:集中管理多个 Emby 源站的反代节点,支持添加/编辑/删除节点、切换反代模式、全局测速、DNS 管理、流量统计、数据大屏,还带订阅者只读模式、节点申请审核和多级权限体系。

单文件 Worker,登录页 + 管理面板全部在一个 worker.js 里,复制粘贴就能部署,不需要任何构建。

当前版本 v3.4.28:订阅用户「可添加节点」权限(逐用户开通,开通后可直接添加节点无需审核,未开通看不到添加按钮;订阅用户始终不能查看源站线路/编辑/删除)+ 成员添加节点记录(子管理员与授权订阅用户添加节点自动留存记录,可查可搜)+ 公告单条覆盖(发新公告自动作废旧公告,子管理员/订阅用户每次进入面板必看、停留 3 秒后可关闭)+ 节点添加申请自动留存申请记录(账户设置可查可搜)+ 公告系统(管理员设置,子管理员/订阅用户进入面板自动弹出)+ 子管理员角色(查看节点 + 审核并直接添加节点,不能编辑/删除/测速/DNS)+ 「禁裸域名访问」安全开关 + 订阅用户节点申请与管理员审核(支持多备用线路、同线路自动替换)+ 预设优选源 30 源 + 四源并发聚合 + EMOS 专用反代模式 + 播放热力图 + 保号提醒提前预警


写在前面


准备阶段

  1. Cloudflare 账号 Cloudflare Dashboard | Manage Your Account(没有账号自行注册登录即可)

  2. 一个域名 立即注册 - DNSHE(推荐这个免费域名即可,也可以用自己的域名)

  3. 明文源码 来TG群找


部署步骤(手动部署到 Cloudflare)

1. 创建 Worker

  1. 打开 Cloudflare 控制台 → 左侧菜单 Workers & Pages → Create application → Create Worker(创建空白 Worker)
  2. 给 Worker 起个名字(比如 emby-proxy-panel),点 Deploy

2. 创建 D1 数据库

面板的节点、统计、订阅者数据都存在 D1(Cloudflare 原生 SQLite):

  1. 左侧菜单 Workers & Pages → D1 → Create database
  2. 名字随意(比如 emby-proxy-db)
  3. 创建好后进入数据库 → 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)

权限类型资源权限
账户 AccountWorkers 脚本 Worker Scripts编辑 Edit
区域 Zone区域设置 Zone Settings读取 Read
区域 Zone清除缓存 Cache Purge清除 Purge
区域 ZoneDNS编辑 Edit
区域 ZoneAnalytics读取 Read

2. 账户资源(Account Resources):选择 包括 Include → 勾选你的账号(你的邮箱@gmail.com)

3. 区域资源(Zone Resources):选择 包括 Include → 特定区域 Specific zone → 勾选你的反代域名区域

4. 客户端 IP 地址筛选:默认不设置(留空即可)

不配 CF_API_TOKEN 那些,流量统计、DNS、区域调度用不了,但节点反代、登录、订阅者模式照常能用。。

4. 粘贴代码并部署

  1. 进入 Worker → Edit code
  2. 把编辑器里默认代码全选删掉
  3. 把本仓库 worker.js 的内容全部复制粘贴进去
  4. 点右上角 Deploy

5. 绑定域名

Worker → Settings → Domains & Routes → Add,在worker域界面,选择添加路由输入你的反代域名(需已接入 CF DNS)。去到Cloudflare 域名概览界面,选择你刚刚添加到worler的域名,点击DNS记录,添加一条CNAME记录,前缀填你刚刚自定义的前缀,关闭小黄云,目标填入:saas.sin.fan

6. 登录

  1. 访问 https://你的worker名.你的子域.workers.dev(或自定义域名)
  2. 输入 ADMIN_TOKEN 设的密码登录
  3. 点顶部 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 登录重新改就行。


使用说明

添加第一个节点

  1. 节点页 → + 添加节点
  2. 填写:
    • 前缀路径:访问路径(如 youno,访问链接 = https://你的域名/youno)
    • 主线路地址:Emby 源站地址(如 http://1.1.1.1:8096),可逗号分隔加多条备用线路
    • 反代模式:默认「保守(抹除IP)」
  3. 提交,然后访问 https://你的域名/前缀 就是反代后的媒体库

分享给订阅者

  1. 管理员登录 → 顶部 logo → 账户设置 → 管理用户
  2. 添加订阅者密码(4 位以上)
  3. 订阅者用该密码登录 = 只读模式,只能看节点、复制直达链接,看不到任何源站信息
  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 → 账户设置重新改。


免责声明

本项目仅供学习与技术测试使用。请遵守当地法律法规与各平台服务条款,开发者不对任何信息造成的后果承担责任。请勿将本项目用于侵犯他人版权或未经授权的访问行为。


关于 About

基于Cloudflare搭建的emby反代管理面板

语言 Languages

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
167
Total Commits
峰值: 132次/周
Less
More

核心贡献者 Contributors