http: # ── middlewares ───────────────────────────────────────────────────────── middlewares: # Подмена Host на входе в куб — k3s-Traefik роутит именно по Host, # а ingress `smart-updown-api` объявлен на smart-updown.binom.pw. smart-updown-host: headers: customRequestHeaders: Host: "smart-updown.binom.pw" smart-updown-redirect-https: redirectScheme: scheme: https permanent: true # ── routers ───────────────────────────────────────────────────────────── routers: # API и WebSocket игры: уходят в k3s (192.168.76.120) на ingress # `smart-updown-api` (ns game), дальше в TS-шлюз :8895. # Отдельный router потому, что PathPrefix специфичнее Host: # так /api и /ws не перехватываются статикой nginx. smart-updown-api-router: rule: "Host(`smart-updown.binom.pw`) && (PathPrefix(`/api`) || PathPrefix(`/ws`))" service: smart-updown-api entryPoints: - websecure tls: certResolver: mycloudflare # Корень: статика игры. Раздаёт nginx на LXC 152 (game-web, 192.168.76.152) # в домашней сети через wg-туннель. Версии — каталогами (/28/, /29/, ...), # корень — активная сборка (симлинк /opt/game/current). smart-updown-router: rule: Host(`smart-updown.binom.pw`) service: smart-updown entryPoints: - websecure tls: certResolver: mycloudflare # http -> https smart-updown-http-redirect: rule: Host(`smart-updown.binom.pw`) entryPoints: - web service: noop middlewares: - smart-updown-redirect-https # ── services ──────────────────────────────────────────────────────────── services: smart-updown-api: loadBalancer: servers: - url: "http://192.168.76.120" smart-updown: loadBalancer: servers: - url: "http://192.168.76.152" noop: loadBalancer: servers: - url: "http://127.0.0.1:9"