42 lines
1.1 KiB
Django/Jinja
42 lines
1.1 KiB
Django/Jinja
{{ sigvild_gallery_frontend_domain }} {
|
|
root * {{ sigvild_gallery_web_root }}
|
|
file_server
|
|
|
|
# SPA routing - serve index.html for all routes
|
|
try_files {path} /index.html
|
|
|
|
# Security headers
|
|
header {
|
|
X-Frame-Options DENY
|
|
X-Content-Type-Options nosniff
|
|
X-XSS-Protection "1; mode=block"
|
|
Referrer-Policy strict-origin-when-cross-origin
|
|
Permissions-Policy "geolocation=(), microphone=(), camera=()"
|
|
}
|
|
|
|
# Cache static assets aggressively
|
|
@static {
|
|
path /_app/* /assets/* /icons/* *.ico *.png *.jpg *.jpeg *.svg *.webp *.woff *.woff2
|
|
}
|
|
header @static {
|
|
Cache-Control "public, max-age=31536000, immutable"
|
|
Vary "Accept-Encoding"
|
|
}
|
|
|
|
# Cache HTML with shorter duration
|
|
@html {
|
|
path *.html /
|
|
}
|
|
header @html {
|
|
Cache-Control "public, max-age=3600, must-revalidate"
|
|
}
|
|
|
|
# Enable compression
|
|
encode gzip
|
|
|
|
# Logging for debugging (can be removed in production)
|
|
log {
|
|
output file /var/log/caddy/sigvild-frontend.log
|
|
level INFO
|
|
}
|
|
} |