diff --git a/frontend/nginx-spa.conf b/frontend/nginx-spa.conf index 55f7e0a..c1af1a6 100644 --- a/frontend/nginx-spa.conf +++ b/frontend/nginx-spa.conf @@ -7,6 +7,14 @@ server { try_files $uri $uri/ /index.html; } + # Never let the browser serve a stale SPA shell: it references hashed asset + # filenames, so a cached index.html strands users on an old build after a + # deploy (Edge heuristically caches it when no Cache-Control is set). Force + # revalidation — a cheap 304 when unchanged — so new deploys are picked up. + location = /index.html { + add_header Cache-Control "no-cache"; + } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; diff --git a/milevault_export/frontend/nginx-spa.conf b/milevault_export/frontend/nginx-spa.conf index 55f7e0a..c1af1a6 100644 --- a/milevault_export/frontend/nginx-spa.conf +++ b/milevault_export/frontend/nginx-spa.conf @@ -7,6 +7,14 @@ server { try_files $uri $uri/ /index.html; } + # Never let the browser serve a stale SPA shell: it references hashed asset + # filenames, so a cached index.html strands users on an old build after a + # deploy (Edge heuristically caches it when no Cache-Control is set). Force + # revalidation — a cheap 304 when unchanged — so new deploys are picked up. + location = /index.html { + add_header Cache-Control "no-cache"; + } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ { expires 1y; add_header Cache-Control "public, immutable";