Caddyfile 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. {
  2. admin off
  3. http_port 80
  4. }
  5. # API subdomain — прокси на backend + MinIO (HTTP, SSL на Synology)
  6. http://api.{$DOMAIN} {
  7. @s3 {
  8. path /s3/*
  9. }
  10. reverse_proxy @s3 minio:9000 {
  11. header_up Host {host}
  12. header_up X-Real-IP {remote}
  13. }
  14. reverse_proxy backend:8080 {
  15. header_up Host {host}
  16. header_up X-Real-IP {remote}
  17. }
  18. header {
  19. X-Content-Type-Options "nosniff"
  20. X-Frame-Options "DENY"
  21. Referrer-Policy "strict-origin-when-cross-origin"
  22. Permissions-Policy "geolocation=(self), microphone=(), camera=()"
  23. }
  24. }
  25. # Frontend main domain
  26. http://{$DOMAIN} {
  27. reverse_proxy frontend:3000 {
  28. header_up Host {host}
  29. header_up X-Real-IP {remote}
  30. }
  31. header {
  32. X-Content-Type-Options "nosniff"
  33. X-Frame-Options "DENY"
  34. Referrer-Policy "strict-origin-when-cross-origin"
  35. Permissions-Policy "geolocation=(self), microphone=(), camera=()"
  36. Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://api-maps.yandex.ru; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self' wss: https://api.{$DOMAIN} https://api-maps.yandex.ru; frame-ancestors 'none';"
  37. }
  38. @static {
  39. path /_next/static/*
  40. path /static/*
  41. path /images/*
  42. path /favicon.ico
  43. }
  44. header @static Cache-Control "public, max-age=31536000, immutable"
  45. encode zstd gzip
  46. }