远程访问和 HTTPS¶
在家里,Evey 的地址类似 http://192.168.1.20:9091。要在家庭网络以外的地方观看,您还需要两样东西:
- 一个公网地址,例如
https://evey.example.org:一个指向您家中网络的域名。 - HTTPS,让密码和视频在互联网上加密传输。Evey 自己不做 HTTPS,而是由反向代理来做:它是放在 Evey 前面的一个小程序,负责安全连接,再把每个请求转交给 Evey。
本页先讲如何把服务器发布出去,再讲每项设置的作用。
三步发布服务器¶
- 设置一个反向代理,由它处理 HTTPS,并把所有请求转发到 Evey 的端口
9091。您可以使用 Evey 自带的 Caddy 配置,也可以用您已经在运行的代理。现成的配置见反向代理配置。 - 在 Evey 中进行设置,位置是管理 → 远程访问:
- 外部 URL:您的公网
https://地址。 - 受信任的代理(IP 或 CIDR,逗号分隔):只有当代理运行在另一个容器里时才需要填。把它所在的网络填在这里,例如 Docker 默认网络是
172.16.0.0/12。
- 外部 URL:您的公网
- 设置完成。 服务器一旦有了公网地址,就会自动开启远程访问。
要检查一下,请运行 docker exec evey-server evey admin doctor。它会显示正在使用的受信任代理;如果一台已发布的服务器正在拒绝来自家庭网络以外的人,它也会发出警告。
远程访问由公网地址决定¶
除非您自己选择,否则 Evey 会在启动时决定:
- 服务器有公网地址(外部 URL,或者变量
EVEY_SERVER_BASE_URL或EVEY_REMOTE_ACCESS_EXTERNAL_URL):远程访问开启。 - 没有公网地址:远程访问关闭。只有您家庭网络里的设备能连接。
只要您手动切换过启用远程访问,Evey 就会保留您的选择,不再替您决定。所以,一台已发布的服务器也可以按您的意愿仅在家庭网络中使用。
远程访问只决定谁能访问服务器。它本身并不是一种保护:每个页面仍然要求登录。
远程访问关闭时,家庭网络以外的人在每个页面上都会被拒绝(错误 403)。应用会显示远程访问已禁用,而不是一个含糊的错误。如果服务器能从互联网访问,而远程访问却是关闭的,Evey 会在好几个地方提醒您:
- 管理 → 远程访问显示所有远程用户均已被锁定;
- 服务器日志在启动时会提到这一点,之后每次拒绝都会记录请求来自哪个地址;
evey admin doctor会把它报告为失败。
设置¶
都在管理 → 远程访问里。每项设置都无需重启就会生效:网络设置从下一个请求开始,码率从下一次播放开始。
https:// 地址发布的服务器,位于 Docker 网络上的代理后面(界面为英文)。| 设置 | 作用 |
|---|---|
| 启用远程访问 | 开启:家庭网络以外的人可以像其他人一样连接。关闭:他们会被拒绝(403)。 |
| 外部 URL | 您的公网地址。邮件里的链接、单点登录和投屏都会用到它。https:// 地址还会开启 HTTPS 模式(见下文)。 |
| 受信任的代理(IP 或 CIDR,逗号分隔) | 这些反向代理告诉 Evey 真实访客是谁时,Evey 会相信它们。本机(环回地址)始终受信任。留空时,列表取自 EVEY_TRUSTED_PROXIES。 |
| LAN 网络(CIDR,逗号分隔) | Evey 视为“家庭网络”的地址范围。默认已列出私有地址范围。如果您使用 VPN(Tailscale、WireGuard),并希望它的用户也算作家庭网络,请把它的地址范围加在这里。 |
| 最大远程码率(Kbps,0 = 无限制) | 对家庭网络以外的人设定的质量上限。私有地址永远不受限制。如果管理 → 转码也为远程观众设了上限,就采用较低的那个。见播放方式是如何决定的。 |
Evey 需要了解代理的哪些情况¶
Evey 在端口 9091 上用普通 HTTP 应答,HTTPS 由反向代理处理。关于代理,Evey 需要知道两件事,都在管理 → 远程访问里设置:
https://开头的外部 URL。 这告诉 Evey 有代理在处理 HTTPS。于是 Evey 会保护它的登录 Cookie(Secure标记),告诉浏览器始终使用 HTTPS(HSTS),并相信受信任代理发来的X-Forwarded-Proto头。- 受信任的代理:当代理和 Evey 不在同一台机器上时需要。位于另一个容器里的代理,需要把它的网络填在这里,例如 Docker 默认网络是
172.16.0.0/12。
覆盖所有地址的范围会被拒绝
把 0.0.0.0/0 或 ::/0 设为受信任代理,会让任何访客都能冒充来自任意地址。管理面板和 evey admin doctor 都会拒绝它。请改为填写代理自己的地址或网络。
改用环境变量设置¶
变量 EVEY_SERVER_BASE_URL 和 EVEY_TRUSTED_PROXIES 可以在 compose 文件里完成同样的设置。如果您的整套配置都写在文件里,或者服务器从第一次启动起就必须通过 HTTPS 应答,这种方式比较合适。
两边都设置时,以管理面板为准。即使基础 URL 是普通 HTTP,https:// 开头的外部 URL 也会开启 HTTPS 模式;保存过的代理列表会取代变量。清空这一栏,就改为使用变量的值。见服务器与网络。
客户端的真实地址¶
要让远程访问和远程质量上限起作用,Evey 必须看到每个访客的真实地址。有两项设置一起起作用:
- 受信任的代理决定 Evey 采信哪些代理提供的访客真实地址。
- 然后,LAN 网络决定这个地址属于“家庭网络”还是“远程”。
如果代理没有转发真实地址,或者 Evey 不信任这个代理,那么每个请求看起来都来自代理自己的私有地址。这样一来,所有人都被视为在家庭网络内:远程访问设置不起作用,也不会套用任何远程上限。
修正代理设置会改变哪些人被视为远程
如果远程访问原本是关闭的,那么从代理开始转发真实地址的那一刻起,家庭网络以外的人就会被拒绝。修改代理设置后,请运行 evey admin doctor:它会显示正在使用的列表及其来源,对公网地址范围发出警告,并对覆盖所有地址的范围报告失败。