跳至主内容

反向代理

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

代理服务器用于捕获并转发出站流量。反向代理则处理入站网络流量,执行相同的转发功能。 它可以作为各种服务的统一入口点,在内部将流量转发到您的实际服务。

这开启了基于规则的路由能力,例如子域名路由、IP地域封锁、速率限制或URL转发。 还可以在反向代理上集中管理DNS和SSL,从而简化所有路由相关的配置。

此外,反向代理提供详细的访问日志记录,能清晰显示网络请求的来源、时间、目的地等完整信息。

在反向代理后运行 Jellyfin

在反向代理后使用 Jellyfin 时需要注意以下重要事项。

日志记录

使用反向代理记录日志时需格外谨慎。Jellyfin 有时会在 URL 中包含认证信息(例如 api_key 参数),完整记录请求路径可能导致敏感信息泄露到日志文件。 建议您采取以下任一措施:保护日志文件安全、不记录完整请求 URL,或在日志中对敏感数据进行脱敏处理。 我们的代理指南提供了从日志文件中脱敏敏感信息的操作示例。

转发头部(Forwarded-For Headers)

当流量通过反向代理转发时,Jellyfin 看到的是代理的 IP 地址而非客户端真实 IP。 这会带来安全风险并可能导致兼容性问题,因为 Jellyfin 将无法区分本地和远程连接。 若配置不当,所有外部访问限制措施都将失效。

因此,必须在 Jellyfin 的网络设置中将反向代理的 IP 地址添加到“已知代理”列表。 这样 Jellyfin 才能正确识别 X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Host 头部,并使用其中的值作为源 IP 地址。默认情况下,Jellyfin 会丢弃所有非“已知代理”发送的转发头部,防止恶意设备通过伪造头部隐藏真实 IP。

这要求反向代理已配置包含该头部(默认可能未开启)。 若出现源 IP 转发异常,请优先检查此项配置。

WebSocket 支持

Jellyfin 在多处功能中使用 WebSocket 协议。并非所有反向代理都默认支持此功能,请务必确保为您的 Jellyfin 服务器启用 WebSocket。

配置指南

我们推荐使用 Caddy,因其操作简便(尤其在 HTTPS 方面)。我们提供了 Caddy 配置指南

若您不想使用 Caddy,其他常见的反向代理方案包括 NginxTraefikHAProxyApache。请注意这些方案的学习曲线高于推荐的 Caddy,相关指南如下:

Let's Encrypt 虽非反向代理,但可独立或配合反向代理提供 SSL 证书。

使用这些指南时,请替换以下变量为您的实际信息:

  • DOMAIN_NAME:访问 Jellyfin 的公共域名(例如 jellyfin.example.com)

  • example.com:Jellyfin 服务运行的域名(例如 example.com)

  • SERVER_IP_ADDRESS: 您的 Jellyfin 服务器 IP 地址(若反向代理在同一服务器则使用 127.0.0.1)

此外,示例配置默认使用 Let's Encrypt 证书。若您使用其他来源的证书,请将 SSL 配置中的 /etc/letsencrypt/DOMAIN_NAME/ 路径替换为您的证书和密钥实际存储位置。

需要在路由器和防火墙开启 80 (TCP) 和 443 (TCP) 端口(指向代理服务器)。如需支持 HTTP/3 (QUIC),还需同时开放 UDP 443 端口。