{ auto_https off metrics } :80 { root * /usr/share/caddy log { output stdout format json } header { Cross-Origin-Embedder-Policy "require-corp" Cross-Origin-Opener-Policy "same-origin" } encode gzip zstd # Reverse Proxy: Plan-B leitet nur /api/mail an den Mail-Service weiter (kein API-Gateway nötig) handle /api/mail/* { reverse_proxy mail-service:8085 } handle /health { respond "healthy" 200 } # Korrekte MIME für .wasm sicherstellen (Caddy erkennt es i. d. R. automatisch; hier explizit) @wasm { path *.wasm } header @wasm Content-Type "application/wasm" # Caching-Strategie: Immutable Assets (hash-Dateien) # WICHTIG: .wasm und .js werden hier gecached. Falls die Dateinamen gleich bleiben, # wird der Browser sie NICHT neu laden. @immutable { path *.png *.svg *.ico *.woff2 *.map } header @immutable Cache-Control "public, max-age=31536000, immutable" # Wasm und JS Dateien: Kein Cache während der aktiven Entwicklungsphase (Plan-B) # um "Alte Seite" Probleme zu vermeiden. @wasm_js { path *.wasm *.js } header @wasm_js Cache-Control "no-store, no-cache, must-revalidate" # Keine Cache-Header für SPA-Einstieg und Laufzeitkonfig @nocache { path /index.html /config.json } header @nocache Cache-Control "no-store" # Static file serving mit SPA-Fallback handle { try_files {path} /index.html file_server } }