远程访问与安全
RVC Next 的服务器默认只监听本机(127.0.0.1:7868),只有这台电脑上的浏览器能打开。本页说明怎样让局域网里的其他设备访问,以及服务器为此采取的保护措施。
服务器能删除和移动文件、读取服务器上的音频、打开音频设备。开放给其他电脑时不需要访问令牌,但能连上的人都拥有这些能力,请确认网络可信,或自己加上防火墙、VPN、带身份验证的反向代理等保护;访问令牌可以作为一层可选的保护。
地址与端口
| 设置 | 命令行选项 | 默认值 | 说明 |
|---|---|---|---|
server.host | --host | 127.0.0.1 | 绑定的地址。0.0.0.0 监听所有 IPv4 网卡,:: 监听所有 IPv6 网卡,也可以写某块网卡的地址 |
server.port | --port | 7868 | 第一个尝试的端口;--port 0 由系统任选一个空闲端口 |
server.strict_port | --strict-port | 关 | 端口被占用时直接失败 |
server.open_browser | --open / --no-open | 开 | 启动后打开浏览器 |
端口被占用(或属于系统保留范围)时,服务器依次尝试后面的端口,最多 20 个,并在日志中提示 "Port 7868 is unavailable. Using port 7869.";开启 strict_port 时则直接以退出码 3 结束。Web UI 中这些设置在 设置 › 常规 的 服务器地址 和 端口,修改后 下次启动服务器时生效。
允许其他电脑访问
-
绑定到所有网卡并启动:
rvc-next webui --host 0.0.0.0 --no-open服务器会在日志中提醒它可以被其他电脑访问:
Binding to 0.0.0.0 makes the server reachable from other machines. -
在另一台设备的浏览器打开
http://<服务器的 IP>:7868,即可直接使用。
不需要访问令牌:任何能连到这个地址的人都能使用全部功能。如果网络不完全可信,请自己加上保护——防火墙只放行信任的设备、通过 VPN 访问、或放在带身份验证的反向代理之后——也可以设置下文的访问令牌。
访问令牌(可选)
访问令牌是任意足够长的随机字符串,设置后每个浏览器都要先输入它:
rvc-next config set server.access_token "换成你自己的长随机字符串"设置后,浏览器加载页面时会弹出 访问令牌 对话框("此服务器需要访问令牌。"),输入令牌后点 保存。浏览器把令牌保存在本地存储中,并写入一个名为 rvc_next_token 的 Cookie(用于音频播放和 WebSocket 连接),下次打开不需要再输入。令牌错误或被修改后,对话框会再次出现。
令牌对所有浏览器都生效,包括服务器本机的浏览器:设置令牌后,本机打开 Web UI 同样会要求输入一次。命令行不经过 API,不需要令牌。
防火墙与明文传输
服务器默认只提供 HTTP,令牌和音频都以明文在网络上传输,只适合在可信的局域网中使用;需要加密时配置证书(见下文)或由反向代理提供 HTTPS。操作系统的防火墙可能需要放行这个端口。
令牌的携带方式
设置了令牌后,/api/、/ws/、/openapi.json 和 /docs 下的每个请求都必须携带它,三种方式任选其一:
- 请求头
Authorization: Bearer <令牌>; - Cookie
rvc_next_token=<令牌>; - 查询参数
?token=<令牌>。
不需要令牌的只有健康检查 /api/v1/app/health(它告诉页面是否需要令牌)和 Web UI 的静态页面本身。令牌比较使用常量时间比较。用脚本调用 API 的例子:
curl -H "Authorization: Bearer $TOKEN" http://192.168.1.10:7868/api/v1/models令牌修改后立即生效,不需要重启服务器。
远程浏览器能做什么
设置了令牌时,所有请求都要先通过令牌检查;在此基础上(或没有令牌时),服务器再根据请求是否来自本机决定允许哪些操作:
| 操作 | 本机浏览器 | 其他电脑 |
|---|---|---|
| 上传音频、转换、分离、训练、实时变声、管理模型、修改设置 | 可以 | 可以 |
| 上传训练数据集(从这台电脑添加音频)、下载音色(下载)或结果 | 可以 | 可以:都不需要服务器上的文件夹 |
| 浏览服务器文件(服务器文件)、使用服务器路径导入模型或指定数据集 | 可以 | 可以,但只限浏览范围内的文件夹 |
| 在文件夹中显示(在服务器的文件管理器中打开) | 可以 | 不可以("只能在服务器本机的浏览器中使用") |
能访问就等于完全控制
能打开 Web UI 的人(设置了令牌时,持有令牌的人)可以修改所有设置(包括浏览范围和文件夹位置)、删除音色和实验。只让你信任的人访问服务器。
浏览范围
Web UI(包括本机浏览器)浏览和使用服务器上的文件时,只能使用 paths.browse_roots 中的文件夹,超出范围的路径会被拒绝(invalid_path)。默认(列表为空)包括:
- 用户主目录;
- 已添加的原版 RVC 安装;
- 数据目录;
- 所有驱动器(Windows 上的
C:\、D:\等),或已挂载的卷(macOS 的/Volumes/*;Linux 的/media/<用户>/*、/run/media/<用户>/*、/mnt/*)。系统根目录/默认不包括。
开放给其他电脑时,建议把范围收窄到真正需要的文件夹:
rvc-next config set paths.browse_roots '["D:/music", "D:/datasets"]'或在 设置 › 存储 的 浏览器可打开的文件夹 中每行填一个。设置后只有这些文件夹可以浏览。
命令行不受浏览范围限制:在服务器上运行命令的人本来就能访问这些文件。
来源检查
为防止其他网站借用你的浏览器操作服务器,服务器对每个请求做两项检查:
- Host 检查:只监听本机时,请求的
Host必须是localhost、127.0.0.1、::1或绑定的地址,否则返回 400(bad_host)。这可以阻止 DNS 重绑定攻击。绑定到非本机地址时不做这项检查。 - Origin 检查:会修改数据的请求(非 GET/HEAD/OPTIONS)和 WebSocket 连接,如果带有
Origin,它必须与页面自身的地址相同,或列在server.allowed_origins中,否则返回 403(bad_origin);没有Origin的跨站请求同样被拒绝。
如果你在另一个网页或工具中调用这个 API(例如自己写的前端),把它的来源加入 server.allowed_origins,服务器也会为这些来源开启 CORS(CORS 部分在启动时配置,修改后需要重启):
rvc-next config set server.allowed_origins '["http://localhost:5173"]'实时变声:服务器的设备或浏览器的设备
实时变声在服务器所在的电脑上运行。选 服务器设备(默认)时,麦克风输入、变声输出和监听都使用这台电脑的音频设备,而不是你打开网页的那台设备。设备面板的标题会写明主机名(<主机名> 上的音频设备),远程访问时还会提示 这些设备属于服务器所在的电脑,而不是此浏览器。 命令行的 rvc-next live devices 同样列出服务器本机的设备。
在实时页顶部选 本浏览器 时,打开网页的手机或电脑的麦克风会发送到服务器,转换后的声音在那台设备上播放(使用本浏览器的麦克风)。浏览器只允许 HTTPS 页面或服务器本机(localhost)上的页面使用麦克风。要从其他电脑使用,请给服务器配置证书:
rvc-next webui --host 0.0.0.0 --ssl-certfile cert.pem --ssl-keyfile key.pem
# 或一次性设置:rvc-next config set server.ssl_certfile /path/cert.pem(以及 server.ssl_keyfile)自签名证书在浏览器中确认警告后即可使用(openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj /CN=my-pc)。由反向代理终止 HTTPS 也可以;它除了转发 /ws/ 下的 WebSocket,还需要转发 /api/v1/live/browser-audio。
反向代理
代码没有专门支持在反向代理后运行,也没有可配置的路径前缀。如果确实要这样做,需要注意上面的检查:
- 服务器只监听本机时,代理转发的
Host必须是localhost或127.0.0.1(否则 400bad_host);嵌入 rvc-next 的程序可以用extra_hosts/allow_host()允许代理或内网穿透的公网主机名(嵌入); - 浏览器发出的
Origin是代理的地址,与转发后的Host不一致,需要把它加入server.allowed_origins; - 需要转发
/ws/的 WebSocket 连接,以及/api/v1/live/browser-audio(浏览器音频); - 服务器只把来自回环地址、且
Host是本机名称(localhost、127.0.0.1、::1)的请求当作本机。代理和服务器在同一台电脑上、又把Host改写为localhost时,所有访问者都会被当作本机;保留公网主机名的代理和内网穿透则不会。公开到互联网时,请在代理上加身份验证或设置访问令牌。