Skip to content

反向代理与网络接入 ​

字数
1269 字
阅读时间
5 分钟

TIP

本节介绍反向代理的关键配置、几种接入方式的取舍,以及代理之后实例自身的访问控制。

直接把实例端口映射到公网缺少路由控制,也会把内部服务直接暴露出去。更稳妥的做法是用反向代理统一接管外部流量。

代理必须做到的四件事 ​

无论用 Nginx、Caddy 还是 Traefik:

  1. 保留真实来源:通过请求头把访客的真实地址传给实例。否则所有请求都来自 127.0.0.1,访问日志记不到真实 IP,基于来源的安全策略和限频也会失效。
  2. 支持协议升级:控制台通过 WebSocket 等长连接推送状态。代理不透传升级请求头,握手就会失败。
  3. 关闭响应缓冲:代理默认会攒批发送,导致流式输出、轨迹和日志卡几秒后一次性弹出。
  4. 足够长的超时:代理默认的读写超时一般只有 30 或 60 秒,空闲的长连接会被断开,前端反复报错重连。

WARNING

最常见的问题不是页面打不开,而是「能登录、页面正常,但数据不刷新」。静态资源和登录走普通 HTTP,只有长连接推送的数据会受影响,优先检查协议升级和响应缓冲。

HTTPS ​

证书交给反向代理管理,实例只在本地回环地址上明文监听。证书申请、续期、加密套件和 HTTP/2 都在代理层处理。Caddy 的自动 HTTPS 或 Traefik 配合 Let's Encrypt 可以全自动签发和续期。

子路径部署 ​

部署在子路径下时,代理和实例两端的路径约定必须一致:代理要么剥离前缀再转发、要么原样传递,实例也要配置对应的基础路径,让页面中的脚本、样式和接口请求带上正确的前缀。

配置后打开浏览器开发者工具的「网络」面板,看是否有 404:

  • 路径少了一段:入口脚本加载失败,页面白屏。
  • 路径多了一段:页面骨架能加载,但样式和图标错乱。

三种接入方式 ​

方式适用场景代价
反向代理 + 域名长期对外提供服务需要证书,需要维护代理配置
SSH 隧道临时远程排错只在连接期间可用
内网 / VPN家用 NAS、公司内网外网访问需要先连 VPN

SSH 隧道通过加密通道把远程实例的端口映射到本地,浏览器访问本地端口即可。不需要域名和证书,不用改实例的监听配置,也不用在防火墙上开端口;断开 SSH 后通道即关闭。

内网直连适用于服务器和访问设备在同一局域网的情况,直接用局域网地址访问。需要在外网访问时,不要把端口映射到公网,而是用 WireGuard 或 Tailscale 搭建 VPN,先连入再访问内网地址。

代理之后的实例配置 ​

配好代理后,还要调整实例自己的访问控制,否则请求仍会被拒绝:

项目位置说明
监听地址与端口服务插件配置默认只监听本机
允许远程访问服务插件配置或环境变量不开启时,即使代理正确也会被拒绝
访问令牌配置 / 环境变量 / 数据目录公网环境必须使用固定的强令牌
受保护前缀服务插件配置接口与控制台路径必须包含在内

最常见的遗漏是没有开启「允许远程访问」。

上线前自检 ​

  1. 外网访问:用移动网络等外网设备打开控制台,确认能看到登录页。
  2. 流式回复:发起一次对话,确认回复是逐字出现的,没有被代理攒批。
  3. 轨迹刷新:对话进行中切到轨迹页,确认步骤实时滚动,而不是整轮结束后一次性出现。
  4. 断线重连:临时停掉反向代理,长连接应及时断开;恢复后页面能自动重连。
  5. 诊断:运行诊断命令,确认没有配置错误或监听警告。

下一步 ​

页面历史

在 CC-BY-SA-4.0 许可下发布