Caddyfile 1.4 KB

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