移动端网络部署
让外网手机安全地打开移动端:仅内网、前置机反向代理、移动网关三种接入方式的选择与配置,以及独立端口、可信代理、接口出站和连通自检。
概述
移动端(手机门户)和 PC 端运行在同一个 SightReport 进程里。PC 端通常只在内网使用,移动端却常常需要从外网打开。为了不把 PC 管理端、设计器一起暴露到外网,移动端可以使用独立端口:这个端口只提供移动端路径(/m、/mapi)和域名校验文件,其余地址一律返回 404。
外网手机怎么连到这个端口,取决于现场网络,有三种方式:
| 方式 | 适用场景 | 外网需要开放什么 |
|---|---|---|
| 仅内网使用 | 手机走公司 Wi-Fi 或 VPN | 不开放 |
| 前置机反向代理 | 有一台公网可达的前置机(Nginx、WAF、负载均衡、网闸端口映射),且它能连进内网 | 前置机的 443 端口;前置机到 SightReport 移动端口 |
| 移动网关 | 前置机连不进内网,只允许内网往外连 | 网关所在机器的手机侧端口;内网到网关隧道端口的出站连接 |
注意:开启「允许外网访问」前,必须先配置独立端口或启用移动网关,否则保存时会被拒绝。已经开着外网访问的旧配置不会被强制关闭,但「网络与部署」页会给出红色提示。
功能入口
移动 > 设置 > 「网络与部署」页签。页签上有五块内容:
- 「当前状态」:主端口、移动端口、可信代理以及需要处理的问题。
- 「外网怎么进来」:三种方式的说明、当前方式,以及按当前配置生成的前置机 Nginx 示例。
- 「移动网关」:网关地址、接入令牌、证书指纹、连接数与连接状态。
- 「钉钉 / 飞书 / 企业微信接口出站」:免登和消息推送访问这些平台接口的方式。
- 「手机连通自检」:用手机扫码检查外网能否打开移动端。
操作步骤
配置移动端独立端口
- 编辑 SightReport 的
application.yml,在sight.mobile下设置port(不能与server.port相同)。如只想让移动端口监听某一块网卡(例如连前置机的那块),同时设置address。 - 重启 SightReport。
- 打开「网络与部署」,「当前状态」里的「移动端口」显示该端口即生效。
server:
port: 9091 # 主端口:PC 端、设计器,只在内网开放
sight:
mobile:
port: 9092 # 移动端独立端口:只放行 /m、/mapi 与域名校验文件
address: # 可选:只监听这个地址,留空 = 所有地址
方式一:前置机反向代理
- 按上一节配置独立端口。
- 在「网络与部署 >「外网怎么进来」」复制「前置机反向代理示例(Nginx)」,放到前置机的 Nginx 配置里,按需补上 HTTPS 证书。示例只转发
/m/、/mapi/和根目录的.txt校验文件,访问根路径时跳转到移动端首页。 - 把前置机访问 SightReport 时使用的地址加入
application.yml的sight.security.trusted-proxies,重启。不加的话,系统看到的访客地址都是前置机自己,按 IP 的限流、外网判定、审计都会失准;同时为了安全,这类请求一律按外网对待。 - 在「基础」页填写「对外访问地址」(手机实际打开的地址,例如
https://m.example.com),打开「允许外网访问」,保存。 - 用「手机连通自检」扫码验证。
方式二:移动网关
移动网关是一个单文件程序(Linux x86_64 / ARM64 / 龙芯、Windows),在官网「下载中心」的「Sight 移动网关」分类下载,版本与 SightReport 一致。它部署在手机能访问到的机器上,SightReport 从内网主动连出到网关,建立加密隧道;手机访问网关,请求经隧道转回 SightReport。网关本身不保存任何业务数据。完整的安装、配置项、升级与排障见移动网关安装与配置,下面是最短步骤。
- 在网关机器上执行初始化,
-hostnames填 SightReport 用来访问网关的域名或 IP:
命令会生成./sight-mobile-gateway init -hostnames dmz.example.comgateway.yaml、隧道证书,并打印「证书指纹」和「接入令牌」。以后可用./sight-mobile-gateway show再次查看。 - 按需编辑
gateway.yaml:手机侧监听端口listen(默认:8080明文,可配置 HTTPS 证书)、隧道端口tunnel.listen(默认:7443)。网关前面如果还有负载均衡,把它的地址填进trusted_proxies。 - 在 SightReport「网络与部署 >「移动网关」」:打开「启用移动网关」,「网关地址」填
wss://dmz.example.com:7443/tunnel,粘贴「接入令牌」和「证书指纹」,保存。 - 在网关机器上注册并启动服务:
Windows 下用管理员身份运行sudo ./sight-mobile-gateway install sudo ./sight-mobile-gateway startsight-mobile-gateway.exe install和start。 - 回到「网络与部署」,「连接状态」显示「已连接(2/2)」即成功。
- 在「基础」页填写「对外访问地址」(手机访问网关的地址),打开「允许外网访问」,保存,再用「手机连通自检」扫码验证。
提示:防火墙只需放通两条:外网到网关的手机侧端口;SightReport 所在内网到网关隧道端口的出站连接。不需要从外面连进内网。
设置钉钉 / 飞书 / 企业微信接口出站
免登和消息推送时,SightReport 服务器要访问 qyapi.weixin.qq.com、oapi.dingtalk.com、api.dingtalk.com、open.feishu.cn。在「钉钉 / 飞书 / 企业微信接口出站」选择访问方式:
| 访问方式 | 说明 |
|---|---|
| 沿用服务器设置 | 默认。和以前一样,服务器启动参数里配置了系统代理就走代理 |
| 直连 | 从本机直接访问,不走任何代理 |
| 经 HTTP 代理 | 填写代理地址 主机:端口 |
| 经移动网关 | 由移动网关代为访问,出口 IP 就是网关机器的 IP;内网服务器完全不用上外网。需先启用移动网关 |
不管选哪种方式,系统都只会访问上面这几个固定主机。
手机连通自检
「手机连通自检」里的二维码指向 对外访问地址/m/m.html#/diag。用手机扫码,页面会显示:
- 连接是否正常;
- 经过的是移动网关、前置机还是直接连接;
- 是否使用了加密连接(HTTP 会提示不安全);
- 前置机地址没有加入可信代理时,给出提示。
属性/参数说明
application.yml
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
sight.mobile.port |
移动端独立端口;配置后该端口只放行移动端路径与校验文件。改动需重启 | 留空 = 移动端在主端口上提供 |
sight.mobile.address |
移动端口只监听该地址 | 留空 = 所有地址 |
sight.security.trusted-proxies |
可信反向代理,单个 IP 或 CIDR;只有来自这些地址的请求才采信 X-Forwarded-For |
默认空 |
「网络与部署」中的移动网关
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 启用移动网关 | 是否连接网关 | 默认关闭 |
| 网关地址 | 隧道地址,形如 wss://主机:端口/tunnel;ws:// 为明文,只建议在受控网络内使用 |
启用时必填 |
| 接入令牌 | 网关 init 时生成;保存后只显示为已设置 |
启用时必填 |
| 证书指纹 | 网关隧道证书的 SHA-256 指纹,填了就只认这张证书 | 空 = 按系统证书库校验 |
| 连接数 | 同时保持的隧道连接数 | 1~4,默认 2 |
对外访问地址
格式为 http(s)://主机[:端口][/路径]。统一网关按路径分发时可以带子路径,例如 https://gw.example.com/sight,此时移动端首页是 https://gw.example.com/sight/m/m.html。域名校验文件始终在域名根目录。
示例
某单位 SightReport 在内网 10.1.2.30,DMZ 有一台公网 IP 为 203.0.113.10 的 Linux 主机,防火墙只允许内网往外连。
- DMZ 主机:
./sight-mobile-gateway init -hostnames 203.0.113.10,编辑gateway.yaml把listen改为:443并配置 HTTPS 证书,install、start。 - SightReport:
application.yml设置sight.mobile.port: 9092,重启;「网络与部署」启用移动网关,网关地址wss://203.0.113.10:7443/tunnel,填入令牌与指纹;接口出站选「经移动网关」;保存。 - 「基础」页:对外访问地址填
https://m.example.com(解析到203.0.113.10),打开「允许外网访问」,保存。 - 手机扫「手机连通自检」二维码,显示「连接正常」「经过移动网关」。
预期结果:外网只能访问到移动端;企业微信、钉钉后台登记的服务器出口 IP 填 203.0.113.10。
注意事项
注意:主端口(PC 端、设计器)不要暴露到外网。外网访问一律通过独立端口或移动网关。
注意:网关的接入令牌等同于隧道的钥匙,只填在 SightReport 里,不要外传。重新执行
init -force会换新令牌和指纹,需要同步更新到 SightReport。
提示:集群部署时,每个节点都会各自连上网关,网关在所有连接间轮流分配请求。
排障
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 保存时提示「开放外网访问前,请先为移动端配置独立端口或启用移动网关」 | 没有独立端口,也没启用网关 | 配置 sight.mobile.port 并重启,或启用移动网关 |
| 连接状态显示「接入令牌不正确」 | 令牌填错,或网关重新 init 过 | 在网关上 show 查看令牌后重新填写 |
| 连接状态显示「网关证书指纹与设置不一致」 | 指纹填错,或网关证书换过 | 用 show 查看最新指纹 |
| 连接状态显示「连不上网关地址」 | 防火墙未放通出站、地址或端口不对 | 在 SightReport 机器上测试能否连到网关隧道端口 |
| 手机打开提示「服务暂不可用」 | 网关上没有存活的隧道连接 | 查看「网络与部署」的连接状态 |
| 自检提示前置机地址没有加入可信代理 | 前置机转发了 X-Forwarded-For,但它的地址不在 trusted-proxies 里 |
把前置机地址加入 sight.security.trusted-proxies 并重启 |