对于 Emby 的重度玩家来说,手头拥有多个公益服、机场服或自己搭建的本地服是常态。但在实际使用中,经常会遇到以下几个痛点:

  • 服务器地址繁多难记:Emby 服务器多了以后,每个服务器的域名、端口各不相同,在不同客户端上配置或更换设备时,需要记录和输入一堆复杂的地址。
  • 客户端限制多:部分 Emby 服务器设置了播放器白名单(例如限制只允许特定的官方或第三方授权播放器连接),导致你无法在自己习惯的客户端上正常播放。
  • 网络要求高:很多优质的公益服或海外服务器在国内直连非常困难,往往需要借助额外的代理网络才能流畅观看。如果想给长辈或不擅长折腾网络的家人使用,在各个设备上分别配置代理客户端不仅繁琐,后期还经常需要因为网络线路变动去维护,体验非常差。
  • 多服保号极易遗忘:许多公益服为了合理分配服务器资源,都有严格的“播放保号”规则(例如需在 7 天或 14 天内有一次播放记录)。手头的服务器多了以后,很难记住各个账号的最后使用时间,非常容易因为遗忘导致账号被清理。
  • 直连流被迫中转,浪费带宽且卡顿:很多 Emby 服务器挂载了网盘(如115网盘、123网盘等)提供 302 直连。当我们为了解决网络连通或客户端限制而使用常规代理或反代服务器时,原本可由客户端直接满速拉取的视频流,往往也会被迫经过反代服务器中转。这不仅导致播放体验下降,还会无端耗尽反代服务器极其宝贵的带宽和流量。

为了彻底解决这些问题,我基于开源项目 chenhr454/emby—worker 进行重构并完善,开发了 EmbyProxy。这是一款使用 Go 语言编写、基于 SQLite 数据库的轻量级 Emby 聚合代理网关。它能将你所有的 Emby 节点收拢到一个统一的入口,并提供客户端伪装、网盘直连重定向(302)、Telegram 自动保号提醒、流量分析等功能。

项目Github地址https://github.com/hkfires/EmbyProxy

EmbyProxy 能做什么?

功能特性 解决的实际问题
统一路由分流 客户端只需记住同一个基础代理地址,通过不同的子路径(节点名)即可连接不同的服务器,大幅降低多设备配置时的记忆和输入成本。
免代理直连海外服 只要将程序部署在一台线路优秀的国内直连中转机(如 CN2 GIA/9929 线路的 VPS)上,所有接入此网关的设备无需配置任何额外的网络代理,即可让家中长辈或小白用户零门槛流畅观看海外 Emby 服。
客户端身份伪装 自动重构 HTTP 请求头、User-Agent 和认证 Token,伪装成特定客户端,程序内置了 Yamby、Hills(安卓与 Windows 版)等常用客户端模板,轻松绕过上游校验。
网盘直连重定向 简单勾选后,若上游返回的是网盘直连播放链接,程序会直接下发 302 重定向由客户端进行直连播放,实现反代服务器零带宽消耗。
Telegram 保号提醒 监控每个节点的最后播放时间,在账号即将过期前通过 Telegram 机器人推送警报。
多线路故障转移 当单个节点配置了多个备用上游地址时,程序会在首选地址连接失败后自动执行熔断,并进行健康重试与故障转移,对客户端实现无感知的高可用。
反代安全防护 每个节点支持设置独立的访问密钥(即加密路径),防止反代节点被他人恶意扫描、爆破或未经授权盗用。
日志分析 内置内存日志缓冲区,可直接在后台面板实时查阅最新请求的访问状态、首字节响应时间与总耗时,大大简化网络质量的诊断过程。
流量捕获 当遇到难以排查的登录失败或播放报错时,支持在后台开启流量抓取,将请求报文持久化到本地,方便深入分析网络交互细节。
轻量化运行 采用 Go 单文件加 SQLite 本地存储架构,启动内存占用极低,支持 Docker 和二进制运行部署。

实战教程:部署与使用 EmbyProxy

下面我们以 Linux 服务器配合 Docker Compose 部署为例,手把手带大家完成 EmbyProxy 的搭建与节点配置。

1. 下载配置文件

首先,在你的服务器上创建一个名为 embyproxy 的目录并进入。直接从官方仓库下载 compose.yml.env.example 文件:

1
2
3
4
5
# 下载 compose.yml
wget https://raw.githubusercontent.com/hkfires/EmbyProxy/main/compose.yml

# 下载环境变量模板并重命名为 .env
wget https://raw.githubusercontent.com/hkfires/EmbyProxy/main/.env.example -O .env

2. 修改配置环境变量

使用编辑器打开刚才下载好的 .env 文件:

1
nano .env

根据实际情况修改或保留以下核心选项:

1
2
3
4
5
6
# 必须:用于登录后台面板的管理密钥,请改为长随机字符串
ADMIN_TOKEN=your_secure_random_token_here
# 可选:服务监听端口,默认 8787
PORT=8787
# 可选:SQLite 数据库存储路径,默认在 data/proxy.db
DB_PATH=./data/proxy.db

3. 启动服务

修改保存后,在同级目录下直接运行以下命令拉取并启动容器:

1
docker compose up -d

启动成功后,程序会在当前目录下自动创建 data 目录用于保存 SQLite 数据库。在浏览器中访问 http://服务器IP:8787/admin,输入你刚才配置的 ADMIN_TOKEN 即可登录管理面板。

安全与避坑提醒: 强烈建议为你的服务配置前置反代(如 Caddy、Nginx 等)并使用 SSL 加密访问。在本文接下来的说明中,我们假设配置好的反代域名为 https://emby.pbots.pp.ua

特别注意:对于前置反代,使用 Caddy 时默认不需要额外设置。但若使用 Nginx,必须在反代配置中显式禁用代理缓存和缓冲。如果开启了缓存,Nginx 可能会因为未能及时消费完响应,或尝试在后台缓存文件,而导致其持续向 EmbyProxy 拉取流数据并缓存在前置服务器中(注意是前置,而不是客户端)。这种高频且长连接的主动抓取极易触发上游 Emby 服务器的安全与防刷策略,导致你的 Emby 账号被封禁。在 Nginx 配置文件中加入以下参数即可解决:

1
2
3
4
proxy_buffering off;
proxy_request_buffering off;
proxy_max_temp_file_size 0;
proxy_cache off;

4. 配置系统参数

登录后台后,首先点击侧边栏的“配置”。在这里你可以根据需要调整日志级别、设置跨域来源(CORS),或者配置图片缓存和全局限流等核心参数,设置完后记得保存:

  • 图片代理缓存:强烈建议开启此功能,它能大幅提升客户端海报墙的加载速度,并显著降低对上游服务器的请求压力。
  • 图片并发限流:部分上游 Emby 服务器对短时间内的请求频率有严格限制,如果客户端在刷海报墙时并发过高,很容易触发上游的 429 Too Many Requests 报错。如果您在“控制台日志”中观察到频繁出现 429 错误,建议开启此功能来平滑图片请求并发,防止因为并发过高被服务端临时阻断。

5. 新增 Emby 节点

系统参数配置完成后,点击“新增 Emby 节点”按钮来配置你的第一个 Emby 服:

  • Emby 节点名称:作为客户端连接的唯一子路径。例如填入 charity,客户端中配置的服务器地址就是 https://emby.pbots.pp.ua/charity/
  • 展示名称:可选配置。主要用于在 EmbyProxy 的网关首页进行展示。如果你在网关上添加了多个节点,可以通过在这里填入自定义名称(如“某某公益服”),这样在访问网关首页时,各个服的入口名字会一目了然,方便区分。
  • 访问密钥:可选,即加密路径。例如图中设置了密钥myemby1234,客户端访问路径就会变成 https://emby.pbots.pp.ua/charity/myemby1234/。这样只有掌握正确密钥的人才能使用该反代节点,有效防止反代服务被扫描、爆破或未经授权盗用。
  • 上游地址:填写你的真实 Emby 服务器地址。如果该服提供了多条备用线路,可以用分号或换行等分隔符同时填入多个地址。EmbyProxy 会在当前使用地址出现故障时,自动熔断故障线路并尝试分发重试至备用线路,实现无感知的故障转移,客户端只需保留这一个聚合节点配置即可。
  • 直连外链:针对前后端分离、挂载了网盘或使用 CDN 优化线路的 Emby 服务器(即 302 服):
    • 开启该功能:当 EmbyProxy 识别到上游的 302 重定向时,会直接将其转发给客户端,由客户端进行直连下载与播放。好处是不耗费反代服务器任何中转流量;弊端是客户端直接请求真实网盘或 CDN 地址时,可能会泄露客户端的真实身份信息。
    • 关闭该功能:EmbyProxy 会在后台自动跟随 302 重定向,继续作为代理把视频流下载并中转转发给客户端。好处是伪装更彻底,保障客户端身份隐私;弊端是会消耗反代服务器的带宽和流量,且可能会导致播放网络性能下降(例如上游原本是直连效果极佳的国内 CDN,中转后反而可能出现卡顿)。
  • 客户端伪装:如果该服限制了客户端,勾选并选择对应的伪装模板(程序内置了 Yamby、Hills 等常用客户端身份)。开启后代理会自动拦截并重写 HTTP 请求头,假装成这些被认可的客户端与上游建立连接。
  • 保号设置:配置保号周期、提前提醒天数和 Telegram 配置。程序会检测该节点上的最后播放时间,若超出限制将通过 Telegram 提醒你及时登录保号。该功能需要在侧边栏中提前配置 Telegram 通知相关参数,本文就不展开了。

添加完成后,点击检测,能看到延时,就可以使用了

其他 Emby 服可以依样画葫芦依次添加~

6. 在客户端中连接

我们以 Hills 客户端 搭配上一节中配置的 charity 节点(且设置了密钥 myemby1234)为例,说明如何在客户端中配置连接:

  • 服务器地址https://emby.pbots.pp.ua/charity/myemby1234/(注意:该服务器地址支持直接在 EmbyProxy 后台的节点列表中一键复制。由于我们在节点配置中设置了访问密钥,因此地址中必须完整包含节点名称 /charity/ 和密钥 /myemby1234/;若没有配置密钥,则直接填写 https://emby.pbots.pp.ua/charity/
  • 端口:如果前置反代使用了标准的 HTTPS 443 端口,此项直接留空或填写 443。如果是在局域网中直接连接,则填写你所映射的真实端口。
  • 账号与密码:填写该节点上对应的真实 Emby 账户和密码。

添加完成后,便可以像往常一样正常浏览和播放了。

7. 日志调试与故障排查

如果在连接或播放时遇到问题,可以点击侧边栏的“日志”:

  • 后台能够实时展示详细的请求耗时、首字节耗时(TTFB)、重定向结果等信息,帮助你快速判断是上游网络抖动还是代理配置问题。
  • 如有需要,可在“系统配置”中临时开启流量捕获,程序会将请求和响应的头部与报文保存到本地的 JSONL 文件中用于深度排查(注意:排查完毕后请及时关闭并删除捕获到的记录文件,以防泄露 Token 等敏感信息)。


结语

以上就是关于 EmbyProxy 聚合网关的完整介绍与部署流程。通过统一的入口分发和可视化的后台管理,希望能帮助大家在多节点、多客户端的使用场景中省去繁琐的网络配置,获得更加流畅、稳定的观影体验。

如果你在安装或使用过程中遇到任何问题,或者有更好的功能建议,欢迎到项目的 GitHub 提交 Issue 与大家一起交流探讨: