Nginx/Caddy 反向代理 Jellyfin 并启用 HTTPS 完整指南
Jellyfin 是一款出色的开源媒体系统,可让您管理和流式传输您的媒体收藏。为了安全地从任何地方访问您的 Jellyfin 服务器,强烈建议设置一个反向代理并启用 HTTPS。这不仅可以为您提供一个易于记忆的域名来访问服务,还能加密您的所有通信,保护您的数据和隐私安全。
本指南将详细介绍如何使用两种流行的反-向代理服务器——Nginx 和 Caddy——来实现这一目标。
准备工作
在开始之前,请确保您已准备好以下内容:
- 一个正在运行的 Jellyfin 实例: 确保您已经在本地网络中成功安装并可以访问 Jellyfin。Jellyfin 默认监听在
8096端口。 - 一个域名: 您需要拥有一个自己的域名(例如
yourdomain.com)。您可以从任何域名注册商处购买。在本指南中,我们将使用jellyfin.yourdomain.com作为示例。 - DNS 配置: 在您的域名提供商的 DNS 管理面板中,创建一个
A或AAAA记录,将您的子域名(例如jellyfin.yourdomain.com)指向您服务器的公共 IP 地址。 - 开放端口: 确保您服务器的防火墙(或您的路由器/云服务商的安全组)允许外部访问
80(HTTP) 和443(HTTPS) 端口。
方案一:使用 Nginx
Nginx 是一个功能强大且高度可配置的 Web 服务器和反向代理。这是许多经验丰富的用户的首选。
步骤 1: 安装 Nginx
根据您的操作系统,使用相应的包管理器安装 Nginx。
对于 Debian/Ubuntu:
bash
sudo apt update
sudo apt install nginx
对于 CentOS/RHEL:
bash
sudo yum install epel-release
sudo yum install nginx
安装完成后,启动并设置 Nginx 开机自启:
bash
sudo systemctl start nginx
sudo systemctl enable nginx
步骤 2: 配置 Nginx HTTP 反向代理
首先,我们创建一个基本的 Nginx 配置,将来自域名的 HTTP 请求代理到 Jellyfin。
在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件:
bash
sudo nano /etc/nginx/sites-available/jellyfin.yourdomain.com
将以下内容粘贴到文件中。请务必将 jellyfin.yourdomain.com 替换为您的真实域名,并根据需要修改 proxy_pass 中的 IP 地址和端口(如果您的 Jellyfin 不在本地主机的 8096 端口上)。
“`nginx
server {
listen 80;
server_name jellyfin.yourdomain.com;
location / {
# 代理到 Jellyfin
proxy_pass http://127.0.0.1:8096;
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $server_name;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
“`
然后,创建一个符号链接到 sites-enabled 目录以启用此配置:
bash
sudo ln -s /etc/nginx/sites-available/jellyfin.yourdomain.com /etc/nginx/sites-enabled/
测试 Nginx 配置是否有语法错误:
bash
sudo nginx -t
如果显示 “syntax is ok” 和 “test is successful”,则重新加载 Nginx 使配置生效:
bash
sudo systemctl reload nginx
现在,您应该能通过 http://jellyfin.yourdomain.com 访问您的 Jellyfin 了。
步骤 3: 使用 Certbot 获取 SSL 证书
我们将使用 Let’s Encrypt 提供的免费 SSL 证书和 Certbot 工具来自动完成这个过程。
安装 Certbot:
“`bash
对于 Debian/Ubuntu
sudo apt install certbot python3-certbot-nginx
对于 CentOS/RHEL
sudo yum install certbot-nginx
“`
运行 Certbot:
执行以下命令,Certbot 会自动检测您的 Nginx 配置(jellyfin.yourdomain.com),获取证书,并自动为您更新 Nginx 配置以启用 HTTPS。
bash
sudo certbot --nginx -d jellyfin.yourdomain.com
在运行过程中,Certbot 会询问您的电子邮件地址(用于接收续订提醒),并让您选择是否将所有 HTTP 请求重定向到 HTTPS。强烈建议选择重定向。
步骤 4: 验证 HTTPS 配置
Certbot 完成后,它会自动修改您的 Nginx 配置文件并重新加载 Nginx。此时,您可以打开 /etc/nginx/sites-available/jellyfin.yourdomain.com 文件查看更改。它看起来应该像这样:
“`nginx
server {
server_name jellyfin.yourdomain.com;
location / {
# ... (与之前相同的 proxy 设置)
proxy_pass http://127.0.0.1:8096;
# ...
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = jellyfin.yourdomain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name jellyfin.yourdomain.com;
return 404; # managed by Certbot
}
“`
现在,尝试通过 https://jellyfin.yourdomain.com 访问您的 Jellyfin。您应该会看到一个安全的锁形图标在浏览器地址栏中。Certbot 还会自动设置一个计划任务来定期续订您的证书。
方案二:使用 Caddy
Caddy 是一个现代的、默认启用自动 HTTPS 的 Web 服务器。它的配置极其简单,非常适合新手。
步骤 1: 安装 Caddy
请参考 Caddy 的官方文档以获取适合您系统的最新安装指南:https://caddyserver.com/docs/install
对于 Debian/Ubuntu (使用 apt):
bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
步骤 2: 配置 Caddyfile
Caddy 的主配置文件是 Caddyfile,通常位于 /etc/caddy/Caddyfile。
编辑该文件:
bash
sudo nano /etc/caddy/Caddyfile
删除所有现有内容,并添加以下几行。请务必将 jellyfin.yourdomain.com 替换为您的域名。
“`
jellyfin.yourdomain.com {
# Caddy 将自动获取并续订此域名的 HTTPS 证书
# 将所有请求反向代理到 Jellyfin
reverse_proxy 127.0.0.1:8096 {
# WebSocket 支持是默认开启的
}
}
“`
就是这么简单!Caddyfile 的语法非常直观。reverse_proxy 指令将所有流量转发到指定的后端。
步骤 3: 启动 Caddy
保存文件后,重新加载 Caddy 使配置生效:
bash
sudo systemctl reload caddy
第一次启动时,Caddy 会自动为您的域名申请 Let’s Encrypt 证书。您可以通过查看 Caddy 的日志来确认此过程:
bash
sudo journalctl -u caddy --no-pager | less
一旦 Caddy 成功获取证书,您就可以立即通过 https://jellyfin.yourdomain.com 访问您的 Jellyfin 实例,它已经启用了 HTTPS。
Jellyfin 网络设置
在某些情况下,您可能需要告诉 Jellyfin 它正在一个反向代理后面运行。
- 登录您的 Jellyfin 管理后台。
- 进入 控制台 -> 网络。
- 在 公共 HTTPS 端口 字段中,输入
443。 - 在 已知的代理 字段中,可以输入您的代理服务器的 IP 地址(例如
127.0.0.1或您局域网中的 Nginx/Caddy 服务器地址)。这不是必需的,但有助于 Jellyfin 正确识别客户端 IP。 - 确保 需要 HTTPS 连接 选项未被勾选,因为 SSL/TLS 终止是在代理层面处理的。
总结
| 特性 | Nginx | Caddy |
|---|---|---|
| 配置复杂度 | 中等到复杂 | 非常简单 |
| HTTPS | 需要手动配置 (使用 Certbot) | 自动,开箱即用 |
| 性能 | 非常高 | 非常高 |
| 功能 | 极其丰富,模块众多 | 核心功能强大,专注于 Web |
| 社区/文档 | 巨大,非常成熟 | 活跃,不断增长 |
- 选择 Caddy 如果您追求简单、快速的部署,并且希望 “自动 HTTPS” 功能为您处理所有证书相关的麻烦。对于个人项目和大多数标准用例来说,Caddy 是一个完美的选择。
- 选择 Nginx 如果您需要进行更高级的配置(例如复杂的缓存规则、负载均衡、自定义模块),或者您的环境中已经在使用 Nginx。Nginx 是一个久经考验的行业标准,提供了无与伦比的灵活性和控制力。
无论您选择哪种方案,通过反向代理和 HTTPS 保护您的 Jellyfin 都是提升安全性和便利性的关键一步。