{ email {$ACME_EMAIL} log { format filter { request>headers>X-Session-Token delete } } } {$SITE_ADDRESS}, http://caddy { encode zstd gzip # Vite emits content-hashed files below each frontend's assets directory. # Defer this header so it replaces vite preview's default no-cache value. @immutableFrontendAssets path_regexp immutableFrontendAssets ^/(gateway|che|kwe|pwe|twe|nya|pya|hwe)/assets/.+-[A-Za-z0-9_-]{8}\.[^/]+$ header @immutableFrontendAssets >Cache-Control "public, max-age=31536000, immutable" @frontendRequests path /gateway/* /che/* /kwe/* /pwe/* /twe/* /nya/* /pya/* /hwe/* header @frontendRequests Cache-Control "no-cache" redir /gateway /gateway/ 308 redir /che /che/ 308 redir /kwe /kwe/ 308 redir /pwe /pwe/ 308 redir /twe /twe/ 308 redir /nya /nya/ 308 redir /pya /pya/ 308 redir /hwe /hwe/ 308 handle_path /image/* { root * /srv/image file_server } handle /gateway/api/trpc* { reverse_proxy runtime:15001 } handle /gateway/api/user-icons/* { uri strip_prefix /gateway/api reverse_proxy runtime:15001 } handle /gateway/api/* { uri strip_prefix /gateway/api reverse_proxy runtime:15001 } handle /gateway/* { @gatewayPublished file { root /srv/frontend-artifacts/gateway/current try_files /index.html } handle @gatewayPublished { route { uri strip_prefix /gateway root * /srv/frontend-artifacts/gateway/current @gatewayAsset path /assets/* handle @gatewayAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15000 } handle /che/api/* { reverse_proxy runtime:15003 } handle /che/* { @chePublished file { root /srv/frontend-artifacts/che/current try_files /index.html } handle @chePublished { route { uri strip_prefix /che root * /srv/frontend-artifacts/che/current @cheAsset path /assets/* handle @cheAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15002 } handle /kwe/api/* { reverse_proxy runtime:15005 } handle /kwe/* { @kwePublished file { root /srv/frontend-artifacts/kwe/current try_files /index.html } handle @kwePublished { route { uri strip_prefix /kwe root * /srv/frontend-artifacts/kwe/current @kweAsset path /assets/* handle @kweAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15004 } handle /pwe/api/* { reverse_proxy runtime:15007 } handle /pwe/* { @pwePublished file { root /srv/frontend-artifacts/pwe/current try_files /index.html } handle @pwePublished { route { uri strip_prefix /pwe root * /srv/frontend-artifacts/pwe/current @pweAsset path /assets/* handle @pweAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15006 } handle /twe/api/* { reverse_proxy runtime:15009 } handle /twe/* { @twePublished file { root /srv/frontend-artifacts/twe/current try_files /index.html } handle @twePublished { route { uri strip_prefix /twe root * /srv/frontend-artifacts/twe/current @tweAsset path /assets/* handle @tweAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15008 } handle /nya/api/* { reverse_proxy runtime:15011 } handle /nya/* { @nyaPublished file { root /srv/frontend-artifacts/nya/current try_files /index.html } handle @nyaPublished { route { uri strip_prefix /nya root * /srv/frontend-artifacts/nya/current @nyaAsset path /assets/* handle @nyaAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15010 } handle /pya/api/* { reverse_proxy runtime:15013 } handle /pya/* { @pyaPublished file { root /srv/frontend-artifacts/pya/current try_files /index.html } handle @pyaPublished { route { uri strip_prefix /pya root * /srv/frontend-artifacts/pya/current @pyaAsset path /assets/* handle @pyaAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15012 } handle /hwe/api/* { reverse_proxy runtime:15015 } handle /hwe/* { @hwePublished file { root /srv/frontend-artifacts/hwe/current try_files /index.html } handle @hwePublished { route { uri strip_prefix /hwe root * /srv/frontend-artifacts/hwe/current @hweAsset path /assets/* handle @hweAsset { file_server } handle { try_files {path} /index.html file_server } } } reverse_proxy runtime:15014 } respond /healthz 200 redir / /gateway/ 302 }