Files
Hide_D 0c2b9632eb perf: 프로필 공용 정적 자산 경로를 제공한다
Caddy가 commit-digest 공용 asset과 sourcemap을 immutable URL로 제공하고, runtime에 공용 공개 경로를 명시한다.
2026-08-22 17:54:50 +00:00

247 lines
5.3 KiB
Caddyfile

{
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"
@immutableSharedProfileAssets path_regexp immutableSharedProfileAssets ^/gateway/profile-assets/[0-9a-f]{40,64}-[0-9a-f]{16}/assets/.+-[A-Za-z0-9_-]{8}\.[^/]+$
header @immutableSharedProfileAssets >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
}
@sharedProfileAsset path_regexp sharedProfileAsset ^/gateway/profile-assets/[0-9a-f]{40,64}-[0-9a-f]{16}/assets/.+$
handle @sharedProfileAsset {
uri strip_prefix /gateway/profile-assets
root * /srv/frontend-artifacts/game-assets/releases
file_server
}
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
}