{ email {$ACME_EMAIL} log { format filter { request>headers>X-Session-Token delete } } } {$SITE_ADDRESS} { 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" 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/* { reverse_proxy runtime:15000 } handle /che/api/* { reverse_proxy runtime:15003 } handle /che/* { reverse_proxy runtime:15002 } handle /kwe/api/* { reverse_proxy runtime:15005 } handle /kwe/* { reverse_proxy runtime:15004 } handle /pwe/api/* { reverse_proxy runtime:15007 } handle /pwe/* { reverse_proxy runtime:15006 } handle /twe/api/* { reverse_proxy runtime:15009 } handle /twe/* { reverse_proxy runtime:15008 } handle /nya/api/* { reverse_proxy runtime:15011 } handle /nya/* { reverse_proxy runtime:15010 } handle /pya/api/* { reverse_proxy runtime:15013 } handle /pya/* { reverse_proxy runtime:15012 } handle /hwe/api/* { reverse_proxy runtime:15015 } handle /hwe/* { reverse_proxy runtime:15014 } respond /healthz 200 redir / /gateway/ 302 }