TGViewer
Fᴜғᴜ の Cʜᴀɴɴᴇʟ Fᴜғᴜ の Cʜᴀɴɴᴇʟ @i_chl · 832 subscribers
Post #399 371
▎分离式 Emby 前后端反代配置 | v2

适用于登录/API 与视频推流使用不同域名的 Emby 服务,通过 Nginx Proxy Manager,让两部分流量都经过自己的服务器

本版沿用 /s1/、/s2/、/s3/ 分别代理推流上游的结构,并补充 JSON 播放地址改写,处理部分客户端读取 DirectStreamUrl 后绕过反代的问题

🟢示例域名
• 原始前端:frontend.embydomain.com
• 推流上游:backend1.embydomain.com、backend2.embydomain.com、backend3.embydomain.com
• 自建入口:provider.emby.yourdomain.com
下面假设四个上游均使用 HTTPS、端口 443

🟢NPM 面板设置
• 域名:填写自己的入口域名
• 协议:https
• 转发主机名/IP:frontend.embydomain.com
• 转发端口:443
• 缓存资源:关闭
• Websockets 支持:关闭,由下方配置处理
• 自定义路径规则(Locations):留空
• SSL:选择入口域名对应的证书,开启强制 SSL
入口域名应解析至自己的服务器。若使用 Cloudflare DNS,并希望客户端直接连接自己的服务器,使用 DNS only(灰云)

🟢自定义 Nginx 配置
将下面四个上游域名全部替换为真实域名,包含正则表达式中转义后的写法。入口域名由 $host 自动获取,无需写死
# ======== 公共代理设置 ========
set $emby_connection "";
set $emby_prefix "";

if ($http_upgrade != "") {
set $emby_connection "upgrade";
}

proxy_http_version 1.1;
proxy_set_header Host $proxy_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $emby_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_ssl_server_name on;
proxy_ssl_name $proxy_host;

proxy_buffering off;
proxy_cache off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;

# 请求未压缩响应,以便进行文本地址替换
proxy_set_header Accept-Encoding "";

# ======== 重定向地址回写 ========
# 注意:正则表达式中的域名 "." 需要写成 "\."
proxy_redirect ~*^(?:https?:)?//frontend\.embydomain\.com(?::443)?(/.*)$ https://$host$1;
proxy_redirect ~*^(?:https?:)?//backend1\.embydomain\.com(?::443)?(/.*)$ https://$host/s1$1;
proxy_redirect ~*^(?:https?:)?//backend2\.embydomain\.com(?::443)?(/.*)$ https://$host/s2$1;
proxy_redirect ~*^(?:https?:)?//backend3\.embydomain\.com(?::443)?(/.*)$ https://$host/s3$1;

# 推流节点返回根相对重定向时,保留对应前缀
proxy_redirect ~^(/(?!/).*)$ https://$host$emby_prefix$1;

# ======== 响应体中的已知域名回写 ========
# 适用于 JSON 播放地址及 HLS 中的已知绝对地址
# 默认还会处理 text/html;不使用 "*" 匹配视频二进制
sub_filter_once off;
sub_filter_types application/json application/vnd.apple.mpegurl application/x-mpegurl audio/mpegurl audio/x-mpegurl;

# 带 :443 的形式放在前面
sub_filter 'frontend.embydomain.com:443' '$host';
sub_filter 'frontend.embydomain.com' '$host';

sub_filter 'backend1.embydomain.com:443' '$host/s1';
sub_filter 'backend1.embydomain.com' '$host/s1';

sub_filter 'backend2.embydomain.com:443' '$host/s2';
sub_filter 'backend2.embydomain.com' '$host/s2';

sub_filter 'backend3.embydomain.com:443' '$host/s3';
sub_filter 'backend3.embydomain.com' '$host/s3';

# ======== 前端与 API ========
location / {
proxy_pass https://frontend.embydomain.com;
}

# ======== 三个推流上游 ========
# /s1/videos/... 会转发为上游的 /videos/...
location ^~ /s1/ {
set $emby_prefix "/s1";
proxy_pass https://backend1.embydomain.com/;
}

location ^~ /s2/ {
set $emby_prefix "/s2";
proxy_pass https://backend2.embydomain.com/;
}

location ^~ /s3/ {
set $emby_prefix "/s3";
proxy_pass https://backend3.embydomain.com/;
}


🟢相比旧版的变化
• 使用明确的 /s1/ 路径,避免误匹配 /s10,不再额外叠加 rewrite
• 补充 JSON 中的已知域名替换,不只处理 302 等重定向
• 推流节点上的后续重定向也参与回写
• 移除默认 UA 拦截,减少对第三方客户端的误伤
• 按请求设置 WebSocket 升级头
• 使用 $host,方便多个自建入口复用同一份配置

🟢如何确认视频确实经过自己的服务器
使用实际 Emby 客户端登录、播放并拖动进度,观察:
• 客户端的大流量连接目标是否为自己的入口
• NPM 是否出现对应的视频请求和持续传输字节
• 是否仍有直连原始推流域名的大流量连接
能登录、能播放,不等于视频一定经过反代
目前这套处理方式已在一个前后端分离服务的一次实际播放中观察到大流量经过自建入口;不同客户端和推流节点仍需按实际使用验证

⚠️适用边界
• 这是一份针对固定、已知上游域名的模板,不保证兼容所有后端(包含自研)
• sub_filter 是文本替换,不是 JSON 解析器;如果域名出现在签名内容或其他非地址字段中,也可能被替换。新增域名、特殊编码、上游强制压缩,以及 HLS 中 /xxx.ts 这类根相对路径,都可能需要单独适配
• 自写 location 也不能假定会自动继承 NPM 默认路径中的 Access List 等功能;需要入口访问控制时,应另行核对


😂 Emby 反向代理

#Emby #Nginx #NPM #NginxProxyManager #反代 #反向代理
More from @i_chl
  1. Sep 15, 2026https://t.me/StashFeed/227
  2. Sep 8, 2026OpenAI 发布 ChatGPT Images 2.5 图像模型 OpenAI 于 9 月 8 日发布 ChatGPT Images 2.5 图像模型,细节更清晰、编辑更精准、生…
  3. Sep 8, 2026▎Codex Chat Titles 非官方 Agent Skill:codex-chat-titles 它可以通过本机 Codex app-server,批量预览并统一所有项目下…
  4. Sep 6, 2026#互推 【转存&引流】媒体托管机器人 【影视分享】115影视资源分享频道 【书籍分享】电子书资源分享 📚 【机场测速】便宜机场测速 【频道推荐】Naruto 频道推荐 👍👍�…
  5. Sep 5, 2026🔗 Sub-Store 近期所谓恶意代码漏洞说明 ▎安全小贴士 里写了自建版如何安全配置 本身就是提供了各种安全配置 用户根据实际使用环境 自由选择 自己没配置 全放开了让别人访…
  6. Sep 4, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →