{ # پنل مدیریت Caddy لازم نیست — سطح حمله کمتر admin off } :80 { root * /srv encode zstd gzip # فایل‌های هش‌دار بیلد: کش بلندمدت بی‌رحم — ولی هرگز fallback به index.html نداشته باشند؛ # پاسخ 200ٔ HTML برای یک مسیر /assets/* نبوده (مثلاً هنگام پنجرهٔ تعویض کانتینر در استقرار) # توسط CDN (WCDN، سیاست SMART) با همین هدر immutable یک سال کش می‌شود و اسکریپت ماژول # را برای همه بازدیدکننده‌ها می‌شکند. فایل ناموجود در assets باید 404 بدهد، نه HTML. @assets path /assets/* handle @assets { file_server } # مسیریابی SPA — مسیرهای ناشناختهٔ غیرasset به index.html برمی‌گردند handle { try_files {path} /index.html file_server } # بقیه (از جمله index.html و fallback اسپا): بدون کش مرورگر تا هر استقرار فوری دیده شود @notassets not path /assets/* header @notassets Cache-Control "no-cache" header @assets Cache-Control "public, immutable, max-age=31536000" }