前言
这是我写的第一个Emby双栈访问的新手向攻略,略微带点技术活,可能大家都已经熟悉了,但不妨碍一起讨论这个前提,由于法令跟通信商的限定,公网访问已经是种奢望,所以大家切用且珍惜,本方案旨在用VPS来达到公网访问的目的,并不是免费的方案,所以大家看看就好,没必要较真,真要较真,轻点喷就行。另外我是一个连贯思路的方案,而且本人特别懒,所以图很少,大家见谅
目标
低成本、可公网访问、稳定易维护的 Emby 影视库搭建方案,随时随地看片。 我会从硬件选型 → 系统搭建 → Emby 配置 → 公网访问 → 安全加固 → 成本优化几个部分分析。
1. 硬件选型(低成本优先)
✅ 选择思路
- 低功耗、全天候运行(省电很重要)
- 硬盘可扩展(影视库会越存越多)
- 解码能力好(尤其是4K和高码率)
📦 推荐方案
- 旧电脑 / 二手主机改造
- 成本:几乎 0 元,如果你家里有闲置 PC。
- 优点:性能好,可直接扩展硬盘。
- 缺点:功耗比低功耗设备稍高。
- 低功耗迷你主机
- 例如:二手 NUC、J4125/J6412 工控机(咸鱼大约 300~800 RMB)
- 优点:功耗低(10-15W),静音,小巧。
- 缺点:内部空间小,需要外接硬盘盒。
- NAS 设备(极低功耗)
- 群晖 DS220+(二手 1000~1500 RMB),或者威联通/QNAP。
- 优点:硬盘热插拔、系统稳定、省心。
- 缺点:初期投资高。
💡 如果预算有限,我建议用 二手 NUC + USB3.0 硬盘盒,够便宜、省电、可扩展。
2. 系统搭建
操作系统选择
- Windows → 入门快,驱动兼容好,但内存占用稍高。
- Linux(Debian/Ubuntu) → 更省资源,稳定。
- NAS系统(群晖 DSM / Unraid / TrueNAS) → 图形化管理,适合长期运行。
如果你是新手,推荐直接 Windows 10 + Emby Server,快、简单,后续熟悉了再迁移到 Linux/NAS。
3. Emby 安装与配置
- 下载 Emby
- 基础配置
- 首次运行时,设置管理员账户。
- 添加媒体库路径(按类型分:电影、电视剧、动漫)。
- 选择元数据抓取源(TheMovieDB 中文版)。
- 转码与硬解码
- 在设置 → 播放 → 启用硬件加速(Intel QuickSync / Nvidia NVENC)。
- 确保 CPU/GPU 支持 H.265、4K 硬解码,减少服务器压力。
- 客户端播放
- 手机/平板:Emby App(iOS/Android)
- 浏览器访问:
http://IP地址:8096
4. 公网访问方案
公网访问是关键,这里有几种方式,按成本和难度排序:
方案A:内网穿透(低成本)
- 免费服务:ZeroTier、Tailscale、Frp、Ngrok
- 操作:
在服务器和客户端安装内网穿透工具(如 Tailscale)。
生成一个虚拟公网IP,直接访问 Emby。
- 优点:免费,简单。
- 缺点:部分免费服务带宽有限(Tailscale/ZeroTier 看高清视频没问题)。
方案B:动态域名 + 路由器端口映射
- 注册免费域名(DuckDNS、No-IP)
- 在路由器设置端口转发:外网 8096 → 内网 Emby 8096
- **缺点:如果你是 CGNAT(移动宽带常见),公网IP不固定,这种方式不可用。
方案C:云服务器中转
- 买一个最便宜的轻量云服务器(阿里云/腾讯云 **/日本区,一个月 20~30 RMB)。
- 云服务器做反向代理(Nginx)转发到家里的 Emby。
- 优点:稳定、可定制域名+SSL。
- 缺点:每月有一定成本。
如果你家宽带有公网IP,我推荐 B方案;如果没有公网IP,用 A方案 最省钱。
5. 安全加固
公网访问必须注意安全:
- 管理员密码一定要复杂(不要用 **
admin/123456
)。
- 启用 HTTPS(用 Cloudflare 免费SSL 或 Let’s Encrypt)。
- 可以限制特定用户的访问权限(防止别人刷爆你的带宽)。
- 重要:不要开放 8096 端口给全网,最好通过 Nginx 做认证。
6. 成本优化总结
项目 |
建议方案 |
成本 |
硬件 |
二手 NUC + USB硬盘盒 |
500~800 RMB 一次性 |
系统 |
Windows 10 / Debian |
免费 |
Emby |
官方免费版(如需多端同步需解锁高级版) |
免费 / 一次性约 400 RMB |
公网访问 |
ZeroTier / Tailscale |
免费 |
域名 |
DuckDNS 免费域名 |
免费 |
电费 |
10~15W 主机常开 |
约 4~8 RMB/月 |
引言
好了闲话多说,不在赘述,上面我想是大家都选择的某一部分方案。那么下面不如正题,大家可以仔细观看了
楔子
NAS,跟Emby,我想大部分同僚们都已熟知。那我们直接跳过NAS和Emby的基础内容,重点放在****云服务器反向代理这块,把公网访问的部分讲到足够细,你直接照着做就行。
我会假设你已经有:
- NAS(群晖 / Unraid / 飞牛 都行)
- 内网可访问的 Emby(例如
http://192.168.1.100:8096
)
- 云服务器(VPS,推荐**/日本/新加坡节点,延迟低,带宽别太小,最低 1Mbps 上行也能跑1080P)
- 一个域名(可选,用于绑定访问)
1. 为什么要用云服务器反代
你之所以需要 VPS 来中转,一般是因为:
- 家庭宽带没有公网IP(CGNAT)
- 公网IP频繁变(DDNS也不稳)
- 想要加 HTTPS、CDN、安全控制
反代的本质:
- 客户端访问 → VPS(公网IP) → VPS通过隧道回到家里的NAS → Emby返回数据
2. 整体架构图
[手机/电脑]
** 访问 emby.mydomain.com (443)
▼
[VPS:Nginx] <——> [内网NAS:Emby]
↑ ↑
HTTPS 内网IP:8096
反向代理 无公网IP
数据流:用户访问 VPS → Nginx 解析域名并转发请求 → 通过内网穿透(FRP/Tailscale/ZeroTier)回家 → Emby 响应。
3. 反代需要的三块东西
- 内网穿透隧道(把 VPS 和 NAS 连接起来)
- Nginx 配置反向代理
- HTTPS 证书绑定
4. 步骤详解
步骤 1:搭建内网穿透隧道
你需要让 VPS 能访问到 NAS 内网的 8096 端口。
方法A:Tailscale(推荐)
- 在 VPS 和 NAS 都安装 Tailscale
- 登录同一个账户(Google/Microsoft 都行)
- **你会得到一个类似 **
100.x.x.x
的虚拟 IP
- **在 VPS 上 **
curl http://NAS虚拟IP:8096
如果能访问,就 OK
方法B:FRP(自己搭)
- VPS 做 frps(服务端)
- NAS 做 frpc(客户端)
- 在 frp 配置中把 Emby 的 8096 端口映射到 VPS 的一个内网端口
步骤 2:安装 Nginx 并配置反代
在 VPS 上:
# Ubuntu / Debian
sudo apt update && sudo apt install nginx -y
新建一个配置文件:
sudo nano /etc/nginx/conf.d/emby.conf
内容:
server {
listen 80;
server_name emby.mydomain.com;
location / {
proxy_pass http://100.x.x.x:8096; # 这里是NAS的Tailscale IP
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;
}
}
保存并测试:
sudo nginx -t
sudo systemctl reload nginx
现在访问 http://emby.mydomain.com
就能通过 VPS 访问你的 NAS 了。
步骤 3:启用 HTTPS
用 Certbot 自动申请 Let’s Encrypt 免费证书:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d emby.mydomain.com
它会自动帮你配置 HTTPS,并且证书每 90 天自动续签。
步骤 4:优化 Nginx 反代性能(可选)
Emby 是流媒体服务,默认 Nginx 配置可能对长连接不友好,可以加:
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
send_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
这样可以避免大文件播放时中途断流。
5. 成本预估
腾讯云 / 阿里云:活动价约 25~35 RMB/月(活动期过了可能翻倍,大家有活动再入会比较好)
搬瓦工 / RackNerd:年付 120~150 RMB
- 域名:NameSilo/Cloudflare 注册,约 50 RMB/年(也可以有免费域名,大家应该都有的,所以我也不再赘述)
- Tailscale / FRP:免费
6. 总结方案
- 隧道:Tailscale(省心,无需手动映射)
- 反代:Nginx(处理 HTTPS + 域名)
- 优势:
1.家宽无公网IP也能访问
2.HTTPS 加密
3.可控访问权限(Nginx可加IP白名单/密码)
4.VPS可顺便做其他服务
下面是一键脚本:
直接在 VPS 上运行就能完成 Emby 反代 + HTTPS 配置,你只需要提前准备好:
- 域名(已解析到 VPS IP)
- NAS Emby 内网 IP(通过 Tailscale / FRP 获取到)
Emby 反代一键部署脚本(Debian/Ubuntu)
假设:
- 域名:
emby.example.com
- NAS Emby 内网 IP:
100.64.0.5
(Tailscale 分配的)
- Emby 端口:
8096
#!/bin/bash
# === 基本信息修改区 ===
DOMAIN="emby.example.com" # 你的域名
EMBY_IP="100.64.0.5" # NAS 的 Tailscale 内网 IP
EMBY_PORT="8096" # Emby 端口
EMAIL="you@example.com" # 用于 SSL 申请的邮箱
# === 系统更新 ===
apt update && apt upgrade -y
# === 安装必要组件 ===
apt install -y nginx certbot python3-certbot-nginx
# === 创建 Nginx 配置 ===
cat > /etc/nginx/conf.d/emby.conf < /dev/null
echo "✅ Emby 反代配置完成"
echo "🌐 访问地址: https://${DOMAIN}"
使用方法
- 先解析域名 → 把
emby.example.com
指向 VPS 公网IP。
- 确保VPS 能访问 NAS 的 Tailscale IP:8096(测试
curl http://100.x.x.x:8096
有返回)。
- 将脚本保存为
emby_setup.sh
,然后执行:
chmod +x emby_setup.sh
./emby_setup.sh
完成后直接用 https://emby.example.com
访问。
这个方案的好处是:
- 一次运行,全自动配置
- 自动申请和续签 SSL
- 已加流媒体优化参数
- VPS 还可以挂其他服务(直接加新的 Nginx 配置就行)
Emby 公网访问反代架构图
Emby 公网访问反代架构图,让你一眼就看懂整个流程,之后你无论加 Jellyfin、Plex 还是其他服务都能直接套用。
架构图:VPS 反向代理 Emby 公网访问
**────────────────────────────**
** 手机 / 平板 / 电脑客户端 **
** (访问 https://emby.example.com)**
**─────────────▲──────────────**
**
** 1. HTTPS 请求(公网)
**
**───────────────**────────────────**
** 云服务器 VPS(**/日本) **
** ────────────────────────────── **
** Nginx: **
** - 监听 443 端口 **
** - SSL 加密(Let's Encrypt) **
** - 流媒体优化(长连接支持) **
** - 反代到 NAS 内网地址 **
**─────────────▲──────────────────**
**
** 2. 内网穿透流量(Tailscale / FRP)
**
**─────────────**──────────────────**
** 家庭网络 NAS **
** ────────────────────────────── **
** Emby Server: **
** - 内网 IP: 100.64.0.5:8096 **
** - 媒体库存储硬盘 **
** - 硬件解码/转码支持 **
**────────────────────────────────**
数据流解释:
- 客户端访问
- 用户输入
https://emby.example.com
- DNS 将域名解析到 VPS 公网 IP
- VPS 反代
- Nginx 接收请求
- 验证 SSL,解密 HTTPS
- 将请求转发到 NAS 的 Tailscale 内网 IP + 端口
- NAS 响应
- Emby 根据请求返回视频流
- 流量经过 VPS 再发回客户端(中转)
- 安全与优化
- VPS 只开放 80/443(HTTP/HTTPS)
- Emby 对公网不可见,防止暴力破解
- Nginx 参数优化保证视频播放稳定
这样看,你的 VPS 就像是一个“门面”,对外只暴露安全的 HTTPS 端口,所有真实的 Emby 数据传输都走加密的内网隧道。 以后如果你加 Jellyfin、Plex、qBittorrent、Radarr、Sonarr 等服务,只需要在 VPS 上加一个新的 Nginx 配置文件就行,核心逻辑完全一样。
通用方案:(集成了一些常用的主流媒体服务器)
Emby + Jellyfin + Plex + qBittorrent + Radarr + Sonarr 的反代 Nginx 模板一次性写好,放到 VPS 上就可以随时启用,之后你扩展家庭多媒体中心会非常方便。
1. Nginx 反代配置合集
假设:
emby.example.com
(Emby)
jellyfin.example.com
(Jellyfin)
plex.example.com
(Plex)
qb.example.com
(qBittorrent)
radarr.example.com
(Radarr)
sonarr.example.com
(Sonarr)
- 内网 IP(Tailscale):
100.64.0.5
- 对应服务端口:
Emby:8096
Jellyfin:8097
Plex:32400
qBittorrent:8080
Radarr:7878
Sonarr:8989
Emby
server {
listen 80;
server_name emby.example.com;
location / {
proxy_pass http://100.64.0.5: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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
send_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
Jellyfin
server {
listen 80;
server_name jellyfin.example.com;
location / {
proxy_pass http://100.64.0.5:8097;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
send_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
Plex
server {
listen 80;
server_name plex.example.com;
location / {
proxy_pass http://100.64.0.5:32400;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
}
}
qBittorrent
server {
listen 80;
server_name qb.example.com;
location / {
proxy_pass http://100.64.0.5:8080;
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;
}
}
Radarr
server {
listen 80;
server_name radarr.example.com;
location / {
proxy_pass http://100.64.0.5:7878;
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;
}
}
Sonarr
server {
listen 80;
server_name sonarr.example.com;
location / {
proxy_pass http://100.64.0.5:8989;
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;
}
}
2. 一次性申请所有 HTTPS 证书
把这些配置保存到 /etc/nginx/conf.d/
,然后执行:
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d emby.example.com -d jellyfin.example.com -d plex.example.com -d qb.example.com -d radarr.example.com -d sonarr.example.com
这样所有域名一次性申请 SSL,自动续签也会全部生效。
3. 后续扩展
- 新增服务 → 复制一份配置改端口+域名
- 限制访问 → 在 Nginx 里加 HTTP 基本认证或 IP 白名单
- 多用户分流 → Nginx 里可按路径反代到不同 Emby 用户实例
- 流量优化 → 开启 Brotli 压缩、HTTP/2、缓存策略
Cloudflare CDN + WARP 回源(可选方案上面已经不错了,有了这个近乎无敌,也是本栏唯一一个有技术参数的)
Cloudflare CDN + WARP 回源 这一层也加上,你的 Emby 公网访问方案就会具备:
- 高安全性:VPS 真实 IP 隐藏
- 防封锁:流量走 Cloudflare CDN
- 加速效果:Cloudflare 全球节点分发
- 低成本:依旧免费 / 低价 VPS
1. 新架构图(加上 Cloudflare 层)
[手机 / 平板 / 电脑客户端]
** 访问 https://emby.example.com
▼
Cloudflare CDN 节点(HTTPS 加速 + 防护)
** 反代请求
▼
[VPS](Nginx + WARP 回源 → 内网 NAS Emby)
** Tailscale/FRP 隧道
▼
[NAS Emby Server]
2. 实现步骤
步骤 1:域名接入 Cloudflare
- 注册 Cloudflare 账号(免费版即可)
- 将你的域名 NS 记录改为 Cloudflare 提供的(在域名注册商后台操作)
- 在 Cloudflare 添加
A
记录:
- 名称:
emby
- IPv4 地址:VPS 公网 IP
- 橙色云图标开启(代表走 CDN),这里你也可以选择不走CF,但我始终认为CF更好一点。
步骤 2:VPS 安装 WARP
WARP 会让你的 VPS 访问 Cloudflare 时走 Cloudflare 内部网络,从而****隐藏真实 IP。
# 安装 WARP
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh
在菜单里:
- 选择
1
安装 WARP(免费流量200G一个月所以懂行的朋友尽量用WARP+)
- 选择
2
使用 WARP+(可选,免费申请流量)(WARP可能很多人不了解,当然了解的都知道这是个神器)
安装完成后:
warp-cli status
确保是 Connected
状态。(WARP虽然有时候会断连,但他仍然会给你重新连接,自动的无须担心,并不影响观影体验)
步骤 3:Nginx 配置调整
你的 Emby 域名在 Cloudflare 上用“橙云”(CDN模式),所以客户端访问时会先到 Cloudflare,再回源到 VPS。
为了兼容流媒体:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_request_buffering off;
send_timeout 600s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
这样可以避免视频流被中途缓存或断开。(加了这条哪怕中途WARP断连也是无感的)
步骤 4:Cloudflare 设置优化(这是我最喜欢的一点,CF很多功能易用,免费!)
进入 Cloudflare 控制台 → 域名设置:
- SSL/TLS 模式 → 选择 Full(严格)
- 缓存规则 → 对视频文件(
.mp4, .mkv
)关闭缓存
- 防火墙规则 → 限制仅特定国家或 IP 访问(可选)
- HTTP/3 → 开启(减少延迟,这是最不可思议的地方,后期可能会收费,可不选)
- Always Use HTTPS → 开启(强制 HTTPS)
3. 成本 & 优势
- VPS:依然 25~35 RMB/月(甚至更低)
- Cloudflare:免费版足够
- WARP:免费(WARP+ 可以加速更多地区)
效果:
- 你在国内/国外访问,都会自动走最近的 Cloudflare 节点
- VPS IP 永远不会直接暴露(除非主动查询 DNS 的灰云记录)
- 影视播放流畅度比直连 VPS 高(尤其跨境访问)
下面依旧是一键脚本,我的宗旨是辛苦一个人,躺平一群人。
VPS + Nginx + Tailscale + WARP + Cloudflare DNS(可选)+ Let's Encrypt HTTPS + Emby 反代 的“一键部署脚本”。 你只要把变量改成你的值,放到 Debian/Ubuntu VPS 上执行就行。脚本包含:
- 安装并启动 Nginx / certbot / tailscale / warp
- 在 VPS 上创建 Emby 的 Nginx 反代并加入流媒体优化(长连接、关闭缓冲等)
- 如果你提供 Cloudflare API Token & Zone ID:脚本会自动替你在 Cloudflare 下建 A 记录并开启橙云(proxy)
- 自动申请并启用 Let’s Encrypt 证书并设置续签任务
- 最后打印检查项与常用调试命令
使用说明(先读一下再运行)
- 把下面脚本保存为
emby_full_setup.sh
。
- 编辑开头变量:
DOMAIN
、EMBY_IP
(Tailscale 给 NAS 的虚拟 IP,例如 100.x.x.x
)、EMBY_PORT
、EMAIL
。
- 可选:如果希望脚本自动在 Cloudflare 上创建 DNS 记录并启用代理(橙云),请填入
CF_API_TOKEN
(需权限: Zone:DNS:Edit
或更高)和 CF_ZONE_ID
(Cloudflare 控制台 -> 站点概览可见)。若不填,脚本只安装服务并生成 nginx 配置,你需手动把域名指向 VPS IP 并在 Cloudflare 打开橙云。
chmod +x emby_full_setup.sh && sudo ./emby_full_setup.sh
(以 root 或 sudo 运行)
脚本(Debian/Ubuntu)
#!/usr/bin/env bash
set -euo pipefail
# ========== 配置区(请修改) ==========
DOMAIN="emby.example.com" # 你的域名
EMBY_IP="100.64.0.5" # NAS 的内网/Tailscale IP
EMBY_PORT="8096" # Emby 端口
EMAIL="you@example.com" # 用于 Let's Encrypt
# 可选:Cloudflare API(如果你想自动创建/开启橙云)
CF_API_TOKEN="" # 可选:Cloudflare API Token (Zone:DNS:Edit)
CF_ZONE_ID="" # 可选:Cloudflare Zone ID
# ========== 结束配置区 ==========
# 检查基本工具
command -v apt >/dev/null 2>&1 || { echo "This script requires apt (Debian/Ubuntu)."; exit 1; }
echo "🔎 更新系统包..."
sudo apt update && sudo apt upgrade -y
echo "📦 安装 nginx, certbot..."
sudo apt install -y nginx certbot python3-certbot-nginx curl jq
# 获取 VPS 公网 IP
VPS_IP="$(curl -s https://ifconfig.co || curl -s https://ipinfo.io/ip || hostname -I | awk '{print $1}')"
echo "VPS 公网 IP: ${VPS_IP}"
# ========== 安装并配置 Tailscale ==========
if ! command -v tailscale >/dev/null 2>&1; then
echo "🔧 安装 Tailscale..."
curl -fsSL https://tailscale.com/install.sh | sh
echo "请在接下来的步骤中手动在 VPS 上运行 'sudo tailscale up' 并完成登录(会弹出 URL)。"
else
echo "Tailscale 已安装"
fi
# ========== 安装 WARP(Cloudflare WARP 客户端) ==========
if ! command -v warp-cli >/dev/null 2>&1; then
echo "🔧 安装 Cloudflare WARP (menu.sh 安装器)..."
curl -fsSL https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh -o /tmp/warp-menu.sh
chmod +x /tmp/warp-menu.sh
# 非交互式安装:执行并选择自动安装(脚本会有交互,如需完全静默可改成包管理安装)
bash /tmp/warp-menu.sh <<'EOF'
1
0
EOF
echo "WARP 安装完成(请检查 warp-cli status)"
else
echo "WARP 已安装"
fi
# ========== 创建 nginx 反代配置 ==========
NGINX_CONF="/etc/nginx/conf.d/emby.conf"
echo "⚙️ 写入 Nginx 配置到 ${NGINX_CONF} ..."
sudo tee ${NGINX_CONF} > /dev/null < ${VPS_IP}) 并开启代理..."
# 查找是否已有记录
RECORDS_API="https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records"
EXIST=$(curl -s -X GET "${RECORDS_API}?name=${DOMAIN}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" -H "Content-Type: application/json")
rec_id=$(echo "${EXIST}" | jq -r '.result[0].id // empty')
if [[ -n "${rec_id}" ]]; then
echo "发现已存在 DNS 记录 (id=${rec_id}),更新为 IP=${VPS_IP},proxy=true ..."
curl -s -X PUT "${RECORDS_API}/${rec_id}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${DOMAIN}\",\"content\":\"${VPS_IP}\",\"ttl\":1,\"proxied\":true}" \
| jq .
else
echo "创建新的 A 记录..."
curl -s -X POST "${RECORDS_API}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${DOMAIN}\",\"content\":\"${VPS_IP}\",\"ttl\":1,\"proxied\":true}" \
| jq .
fi
echo "✅ Cloudflare DNS 已处理(请到 Cloudflare 控制台确认 NS 已替换并生效)"
}
create_cloudflare_record
# ========== 申请 Let's Encrypt 证书 ==========
echo "🔐 尝试使用 certbot 为 ${DOMAIN} 申请证书..."
# 若 Cloudflare 橙云已开启,certbot --nginx 仍可通过 Cloudflare 转发获取证书(正常情况下)
sudo certbot --nginx -d "${DOMAIN}" --non-interactive --agree-tos -m "${EMAIL}" || {
echo "❗ certbot 通过 nginx 模式申请失败,尝试纯 http 验证..."
sudo certbot certonly --webroot -w /var/www/html -d "${DOMAIN}" --non-interactive --agree-tos -m "${EMAIL}"
echo "请手动将证书配置到 nginx(/etc/letsencrypt/live/${DOMAIN}/)"
}
echo "✅ 证书申请完成,certbot 已配置 nginx(若使用 nginx 模式)"
# ========== 设置自动续签任务 ==========
echo "🕑 设置 certbot 自动续签(每日检查)..."
sudo bash -c 'cat >/etc/cron.d/certbot-renew <
常见问题(免你踩坑)
- Certbot 失败:如果 Cloudflare 的“橙云(proxy)”在某些设置下会干扰 HTTP 验证,临时把该子域改为灰云(非代理),申请证书成功后再开回橙云,或使用 DNS 验证(通过 Cloudflare API)来申请证书。
- Tailscale 未登录:脚本只会安装 tailscale,登录需要你在 VPS 上执行
sudo tailscale up
,然后用浏览器完成授权(一次即可)。
- WARP 未连接/不可用:warp 安装器可能会有交互,若你希望完全无交互安装,可告知我你愿意使用 cloudflared/或不使用 warp。(这一点是最后一部分最重要的部分,如果发现不行尽量就不要用了,因为真的不是每一个人都能成功的)
- 流媒体卡顿:确认 VPS 带宽和 Tailscale 节点稳定性(可测试
iperf
或直接用 curl
下载测试文件),必要时把 VPS 换到更靠近你的节点(HK/JP/Singapore)。
总结
这个方案虽然很长,但却仍然可以自己慢慢手搓,难点在于无法突破公网IP的限制,而我也无法从一些奇奇怪怪的问题中解决掉所有未知问题(因为我也是初次尝试),所以大家讨论的时候我可能没办法回答大家出现的所有问题,希望大家在使用过程中多多尝试,我算是提供一种思路,感谢大家看到这里,衷心希望大家能搭建属于自己的影视库。如果能有更好的方案,还请大家不吝赐教