本方案实现了:自动追番下载 -> 网盘转存 -> strm 生成与同步 -> Emby 刮削 -> 302 全速直连播放。通过中转机负载均衡,彻底解决跨境连接慢和海报墙加载卡顿的问题。
📁 一、 核心机(东京)全局架构规划
建议统一存储路径,避免 Docker 挂载混乱。
/data/emby_hub/
├── config/ # 存放所有服务的配置文件
│ ├── ani-rss
│ ├── qbit
│ ├── openlist
│ ├── emby
│ ├── medialinker
│ └── taosync
└── media/ # 存放媒体资源
├── downloads # qBit 下载目录
└── strm # taoSync 同步后的 strm 存储库
二、 核心机服务部署 (Docker-compose)
请确保核心机已安装 Docker 和 Docker-compose。
1. 自动追番与下载层
Ani-RSS 监控订阅并推送给 qBittorrent。
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbit
environment:
- PUID=0 # 建议根据实际用户修改,0为root
- PGID=0
- TZ=Asia/Shanghai
- WEBUI_PORT=8080
volumes:
- /data/emby_hub/config/qbit:/config
- /data/emby_hub/media/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: always
ani-rss:
image: wushuo894/ani-rss:latest
container_name: ani-rss
environment:
- PUID=0
- PGID=0
- PORT=7789 # 官方默认端口
- TZ=Asia/Shanghai
volumes:
- /data/emby_hub/config/ani-rss:/config
- /data/emby_hub/media/downloads:/Media # 映射下载目录以便刮削
ports:
- 7789:7789
restart: always
2. 存储与分发层
OpenList 挂载云盘并生成 strm,taoSync 将其同步至 Emby 库。
services:
openlist:
image: wushuo894/openlist:latest
container_name: openlist
environment:
- PUID=0
- PGID=0
- UMASK=022
volumes:
- /data/emby_hub/config/openlist:/opt/openlist/data
- /data/emby_hub/media/downloads:/downloads # 挂载本地下载目录以便生成 strm
ports:
- 5244:5244
restart: always
taosync:
image: dr34m/tao-sync:latest
container_name: taosync
environment:
- TAO_PORT=8023 # 后台管理端口
- TZ=Asia/Shanghai
volumes:
- /data/emby_hub/config/taosync:/app/data
- /data/emby_hub/media/strm:/app/media # 目标存放 strm 的位置
ports:
- 8023:8023
restart: always
3. 媒体中心与 302 逻辑层
Emby 负责展示,MediaLinker 负责将播放请求重定向到网盘直连。
services:
emby:
image: amilys/embyserver_arm64v8:4.8.11.0
container_name: emby
environment:
- UID=0
- GID=0
- GIDLIST=0 # amilys 镜像特有变量
volumes:
- /data/emby_hub/config/emby:/config
- /data/emby_hub/media/strm:/media # 只挂载 strm 库即可
ports:
- 8096:8096
restart: always
medialinker:
image: thsrite/medialinker:latest
container_name: medialinker
volumes:
- /data/emby_hub/config/medialinker:/app/config
ports:
- 8091:8091
restart: always
三、 配置核心流程 (关键步骤)
- OpenList 挂载:
- 进入 OpenList 后台(5244),挂载 OneDrive 或移动云盘。
- 配置
strm 生成:将/downloads下的动漫路径映射。
- taoSync 配置:
- 登录 8023 端口,配置同步任务。源路径选择 OpenList 的 WebDAV 或生成的 strm 目录,目标路径指向
/app/media。
- 登录 8023 端口,配置同步任务。源路径选择 OpenList 的 WebDAV 或生成的 strm 目录,目标路径指向
- MediaLinker 配置:
- 在
/data/emby_hub/config/medialinker/config.json中配置:EmbyServer:http://172.17.0.1:8096(容器访问宿主机的常用 IP)PublicAddr: 填入核心机 IP 或域名。PathMapping: 将 Emby 的内部路径/media映射为 OpenList 的外部下载链接http://{核心机IP}:5244/d。
- 在
四、 🌐 中转机 深度配置
中转机在本项目中承担三个核心任务:
- UI 加速:通过 Nginx 硬盘缓存核心机的海报和图标。
- 地址重写:通过
sub_filter将播放请求劫持到中转节点。 - 指令中继:将 OpenList 的 302 重定向指令下发给最终用户。
1. 准备工作
- 系统环境:推荐 Debian 11/12 或 Ubuntu 22.04。
- 面板工具:已安装宝塔面板(BT-Panel)或 1Panel,并安装 Nginx 1.22+。
- 域名准备:准备解析域名(如
hk.movie.srbuff.uk)并申请好 SSL 证书。
2. 第一步:定义全局缓存空间
在宝塔面板点击 软件商店 -> Nginx -> 设置 -> 配置修改。在 http { ... } 块内加入以下代码:
Nginx
# 定义 Emby 专用硬盘缓存空间
# keys_zone=emby_cache:20m (内存索引区20MB)
# max_size=10g (硬盘最大占用10GB,根据你中转机硬盘调整)
# inactive=30d (30天不访问自动删除)
proxy_cache_path /www/server/nginx/emby_cache levels=1:2 keys_zone=emby_cache:20m max_size=10g inactive=30d use_temp_path=off;
3. 第二步:站点 Nginx 核心配置
新建站点后,进入站点的“配置文件”,删除所有默认内容,粘贴以下满血版配置:
# --- 宝塔自动生成的 listen 和 server_name 部分请保留或按需修改 ---
#listen 80;
#listen 443 ssl http2;
#server_name hk.movie.srbuff.uk;
# SSL 证书配置(如果是宝塔申请的,请保留原来的那几行 ssl_ 开头的代码)
# ssl_certificate ...
# ssl_certificate_key ...
# --- 核心逻辑开始 ---
# 全局变量定义
set $core_ip 155.248.xxx.xxx; # 填写你东京核心机的真实 IP
set $core_domain arm.movie.srbuff.uk; # 填写核心机虚构域名
# 禁用后端压缩,防止 sub_filter 替换失败
proxy_set_header Accept-Encoding "";
# 1. 静态资源区 (加速海报、剧照)
location ~* \.(jpg|jpeg|png|webp|gif|ico|svg|woff2|woff|ttf)$ {
proxy_pass http://$core_ip:8091;
proxy_set_header Host $host;
proxy_cache emby_cache;
proxy_cache_valid 200 30d;
expires 30d;
add_header X-Cache-Status $upstream_cache_status;
}
# 2. API 与元数据区
location ~* /(Items|Users|Library|System|Items/RemoteSearch) {
proxy_pass http://$core_ip:8091;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache emby_cache;
proxy_cache_valid 200 2m;
# 劫持播放链接
sub_filter '$core_domain:5244' '$host';
sub_filter_once off;
add_header X-Cache-API $upstream_cache_status;
}
# 3. 业务逻辑层 (WebSocket)
location / {
proxy_pass http://$core_ip:8091;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
sub_filter '$core_domain:5244' '$host';
sub_filter_once off;
proxy_redirect http://$core_domain:5244/ /;
}
# 4. 视频分发层 (OpenList 302 中继)
location /d/ {
proxy_pass http://$core_ip:5244;
proxy_set_header Host $host;
proxy_buffering off;
proxy_cache off;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_read_timeout 3600s;
}
# --- 核心逻辑结束 ---
4. 第三步:创建缓存目录并赋权
在控制台输入以下命令,确保 Nginx 有权限写入缓存文件:
mkdir -p /www/server/nginx/emby_cache
chown -R www:www /www/server/nginx/emby_cache
chmod -R 755 /www/server/nginx/emby_cache
# 重启 Nginx 生效
nginx -t && nginx -s reload
5. 调试与验证
如何判断配置是否成功?
- 海报加速验证: 打开浏览器按
F12-> 进入 Network。刷新 Emby 页面,点击一张图片请求,查看Response Headers。如果看到X-Cache-Status: HIT,说明图片已从中转机本地下发,不占东京带宽。 - 302 直连验证: 点击播放视频。查看网络请求中指向
/d/xxx的请求。- 如果返回状态码是
302 Found。 - 且
Location头部是https://*.139drive.com/...(移动云盘) 或https://*.sharepoint.com/...(OneDrive)。 - 说明播放流量已经完全绕过核心机和中转机,实现了真正的直连。
- 如果返回状态码是
6. 为什么这么配置?
- sub_filter 的奥秘:MediaLinker 在处理 strm 时会返回核心机的域名。如果我们不重写它,用户客户端就会直接去连接东京的 5244 端口。由于国内连接东京 OpenList(5244)极不稳定且容易被墙,通过重写地址,让客户端去连接香港中转机的
/d/路径,再由香港机去向东京索要 302 指令,成功率提升 200%。 - proxy_buffering off:如果不关掉缓冲区,Nginx 会尝试先下载一部分视频到本地再发给用户,这会导致播放卡顿且瞬间挤爆中转机内存。