79 lines
1.9 KiB
Caddyfile
79 lines
1.9 KiB
Caddyfile
{
|
|
# Global options
|
|
email {$EMAIL}
|
|
# Uncomment for testing to avoid rate limits
|
|
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
|
|
}
|
|
|
|
{$DOMAIN:localhost} {
|
|
# Automatic HTTPS (Caddy handles Let's Encrypt automatically)
|
|
|
|
# Reverse proxy to Flask app
|
|
reverse_proxy digiserver:5000 {
|
|
header_up Host {host}
|
|
header_up X-Real-IP {remote_host}
|
|
header_up X-Forwarded-For {remote_host}
|
|
header_up X-Forwarded-Proto {scheme}
|
|
|
|
# Timeouts for large uploads
|
|
transport http {
|
|
read_timeout 300s
|
|
write_timeout 300s
|
|
}
|
|
}
|
|
|
|
# File upload size limit (2GB)
|
|
request_body {
|
|
max_size 2GB
|
|
}
|
|
|
|
# Security headers
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
X-Frame-Options "SAMEORIGIN"
|
|
X-Content-Type-Options "nosniff"
|
|
X-XSS-Protection "1; mode=block"
|
|
}
|
|
|
|
# Logging
|
|
log {
|
|
output file /var/log/caddy/access.log
|
|
}
|
|
}
|
|
|
|
# Handle IP address access without automatic HTTPS
|
|
http://192.168.0.206 {
|
|
# Reverse proxy to Flask app
|
|
reverse_proxy digiserver:5000 {
|
|
# Headers
|
|
header_up Host {host}
|
|
header_up X-Real-IP {remote_host}
|
|
header_up X-Forwarded-For {remote_host}
|
|
header_up X-Forwarded-Proto {scheme}
|
|
|
|
# Timeouts for large uploads
|
|
transport http {
|
|
read_timeout 300s
|
|
write_timeout 300s
|
|
}
|
|
}
|
|
|
|
# File upload size limit (2GB)
|
|
request_body {
|
|
max_size 2GB
|
|
}
|
|
|
|
# Security headers
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
X-Frame-Options "SAMEORIGIN"
|
|
X-Content-Type-Options "nosniff"
|
|
X-XSS-Protection "1; mode=block"
|
|
}
|
|
|
|
# Logging
|
|
log {
|
|
output file /var/log/caddy/access.log
|
|
}
|
|
}
|