# XWorld 生产反向代理(Caddy v2,Windows)。 # 作用:对外只暴露 443(HTTPS/WSS),自动申请并续期 Let's Encrypt 证书; # 网关/CDN 两个 .NET 进程只绑 127.0.0.1,由 Caddy 反代。 # # 前置: # 1) 把下面两个域名换成你的真实域名。 # 2) 两个域名的 DNS A 记录都指向本服务器公网 IP。 # 3) 服务器防火墙放通入站 80 与 443(80 用于 ACME 证书签发与跳转)。 # 4) 不要对外开放 5005 / 15081(它们只绑 loopback,给 Caddy 用)。 # # 启动(测试):caddy run --config Caddyfile # 装成服务见 README(用 NSSM 把 caddy 也注册为 Windows 服务)。 # ── 官网静态主页(被裸域名与 www 复用) ─────────────────────── # 把主页文件放到服务器的 C:\xworld\site\(须含 index.html)。 (site) { root * C:\xworld\site file_server } # ── 网关(大厅/对局,WebSocket) ─────────────────────────────── # 客户端连 wss://game.xworld.ren/ws?pid=... # Caddy 的 reverse_proxy 自动处理 WebSocket Upgrade,无需额外配置。 game.xworld.ren { encode zstd gzip reverse_proxy 127.0.0.1:5005 } # ── Gitea 代码仓库 ────────────────────────────────────────────── # Gitea 仅监听本机 3000 端口;Caddy 自动申请/续期 HTTPS 证书。 git.xworld.ren { encode zstd gzip reverse_proxy 127.0.0.1:3000 } # ── 官网主页(裸域名) ───────────────────────────────────────── # 需给 xworld.ren 加一条 A 记录(主机名 @)指向本机公网 IP。 xworld.ren { encode zstd gzip import site } # ── 资源 CDN(静态文件)+ 官网主页(www) ────────────────────── # 客户端按 https://www.xworld.ren/game/60S/ 为资源根: # 大厅: …/game/60S/XWorld//… # 小游戏: …/game/60S/minigame///… # 而 Cdn.Runner 从其 --root 起算路径(/XWorld/… , /minigame/…), # 故必须用 handle_path 剥掉 /game/60S 前缀再反代,否则 404。 www.xworld.ren { encode zstd gzip # /game/60S/* 走 CDN handle_path /game/60S/* { reverse_proxy 127.0.0.1:15081 } # 其它路径返回官网静态主页 handle { import site } }