这台机器上跑着不止一个站点。博客在 443,其余服务各占一个子域名,全部走 https,全部从同一张证书进来。这组文档把它们逐个说清楚:做什么用、从哪进、有什么坑。
拓扑先讲清楚
公网这台是 RainYun 的 VPS(Debian 13),它干三件事:
- nginx 守 443,是整站的 TLS 终点:按子域名分流,静态的博客自己发,其余反代到本机端口。80 端口只负责跳转和证书校验,不提供内容;
- frps 监听 7000,接受内网机器的反向连接,把 5001–5008 这些端口分给不同服务;
- OpenWebUI 容器,绑在
172.17.0.1:8081,不出公网,由 nginx 反代。
真正跑业务的是内网那台机器,它用 frpc 主动连出来。所以「服务不在这个 IP 上」这件事很关键——重启公网这台,业务不会挂;反过来,内网那台掉线,前端页面会全部变成 502。这个博客是例外,它是纯静态文件,就在本机。
一览
端口只是内部连接方式,对外一律用域名,点进去就能开。
| 地址 | 项目 | 用途 | 后端 |
|---|---|---|---|
| zxtweb.fun | 博客 | 就是这一站 | 本机静态文件 |
| game.zxtweb.fun | 对决大厅 | 所有对战模块的入口、房间人数、登录状态 | :5004 |
| game.zxtweb.fun/chem | 化学对决 | 化学式配平抢答,抢分、连击、团队赛制 | :5004 |
| game.zxtweb.fun/maze | 迷宫战场 | 俯视角射击,反弹弹道、双弹种、炸药桶,最多 5v5 | :5004 |
| game.zxtweb.fun/arena3d | 3D 竞技场 | 第一人称多人射击,30Hz 服务端权威判定,手机可玩 | :5004 |
| game.zxtweb.fun/admin | 对决后台 | 上传/删除游戏模块、重启房间服务、看账号 | :5004 |
| town.zxtweb.fun | 像素小镇 | 与现实时间同步的小镇,居民自行走动 | :5008 |
| chat.zxtweb.fun | Open WebUI | 多模型对话、知识库、多用户权限 | :8081 |
| bot.zxtweb.fun | AstrBot 控制台 | 对话机器人的插件、技能、会话记录 | :5002 |
| files.zxtweb.fun | 文件站 | 网页界面,浏览和下载 | :5003 |
| files.zxtweb.fun/webdav/ | WebDAV | 挂载点,给访达/资源管理器/手机用 | :5003 |
| img.zxtweb.fun | 图床与素材 | 截图、证书、镜像的公开目录,可直接外链 | :5007 |
ssh -p 5005 |
SSH 跳板 | 进内网那台机器(不走 https) | :5005 |
ssh -p 5006 |
SSH / MC | Minecraft 所在的那台 Ubuntu(不走 https) | :5006 |
关于那张证书
七个域名共用一张 Let’s Encrypt 证书,自动续期,续期后自动 reload nginx。http:// 一律 301 到 https://,并且开了 HSTS——浏览器五分钟内就会记住「只走 https」。