影视库搭建指南🚀 极致自动化:Emby + OpenList + 302 直连 + 多节点中转全攻略影视库搭建指南

本方案实现了:自动追番下载 -> 网盘转存 -> 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

三、 配置核心流程 (关键步骤)

  1. OpenList 挂载
    • 进入 OpenList 后台(5244),挂载 OneDrive 或移动云盘。
    • 配置 strm 生成:将 /downloads 下的动漫路径映射。
  2. taoSync 配置
    • 登录 8023 端口,配置同步任务。源路径选择 OpenList 的 WebDAV 或生成的 strm 目录,目标路径指向 /app/media
  3. 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

四、 🌐 中转机 深度配置

中转机在本项目中承担三个核心任务:

  1. UI 加速:通过 Nginx 硬盘缓存核心机的海报和图标。
  2. 地址重写:通过 sub_filter 将播放请求劫持到中转节点。
  3. 指令中继:将 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. 调试与验证

如何判断配置是否成功?

  1. 海报加速验证: 打开浏览器按 F12 -> 进入 Network。刷新 Emby 页面,点击一张图片请求,查看 Response Headers。如果看到 X-Cache-Status: HIT,说明图片已从中转机本地下发,不占东京带宽。
  2. 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 会尝试先下载一部分视频到本地再发给用户,这会导致播放卡顿且瞬间挤爆中转机内存。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇