fix(frontend): مسیرهای /assets/* هرگز به index.html برنگردند — مسموم‌شدن کش CDN

در پنجرهٔ تعویض کانتینر فرانت‌اند، درخواستِ هشِ جدید که در dist کانتینرِ در
حال اجرا نبود با fallback اسپا پاسخ 200ٔ text/html می‌گرفت؛ CDN (WCDN، SMART)
همین پاسخ HTML را زیر URL فایل جاوااسکریپت با هدر immutable یک‌ساله کش می‌کرد
و اسکریپت ماژول برای همهٔ بازدیدکننده‌ها می‌شکست (سایت روی پری‌لودر قفل می‌شد).
حالا فایل ناموجود در assets واقعاً 404 می‌دهد که کش نمی‌شود.
This commit is contained in:
aramesh-site deploy
2026-09-30 10:53:46 +00:00
parent d513512b87
commit b070125f51
+13 -5
View File
@@ -7,15 +7,23 @@
root * /srv root * /srv
encode zstd gzip encode zstd gzip
# مسیریابی SPA — مسیرهای ناشناخته به index.html برمی‌گردند # فایل‌های هش‌دار بیلد: کش بلندمدت بی‌رحم — ولی هرگز 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 try_files {path} /index.html
file_server file_server
}
# فایل‌های هش‌دار بیلد: کش بلندمدت بی‌رحم
@assets path /assets/*
header @assets Cache-Control "public, immutable, max-age=31536000"
# بقیه (از جمله index.html و fallback اسپا): بدون کش مرورگر تا هر استقرار فوری دیده شود # بقیه (از جمله index.html و fallback اسپا): بدون کش مرورگر تا هر استقرار فوری دیده شود
@notassets not path /assets/* @notassets not path /assets/*
header @notassets Cache-Control "no-cache" header @notassets Cache-Control "no-cache"
header @assets Cache-Control "public, immutable, max-age=31536000"
} }