feat: serve hub SPA shell with Cache-Control: no-cache
Hashed assets stay immutable via the existing regex location; the SPA shell (index.html, served via tryFiles fallback for /, deep links, and literal /index.html) now revalidates on every load so new deploys are picked up without browsers holding a stale shell that references deleted hashed assets. no-cache = cache + revalidate (304), not "don't store" — bandwidth cost is a single conditional request per page load. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ca19127584
commit
33bc06440e
1 changed files with 11 additions and 2 deletions
13
webapp.nix
13
webapp.nix
|
|
@ -319,11 +319,20 @@ in {
|
||||||
|
|
||||||
locations = {
|
locations = {
|
||||||
"/" = {
|
"/" = {
|
||||||
# Try files, fallback to index.html for SPA routing
|
# Try files, fallback to index.html for SPA routing.
|
||||||
|
# Everything matching this prefix ultimately serves the SPA
|
||||||
|
# shell (index.html), which must revalidate on every load so
|
||||||
|
# new deploys are picked up without the browser holding a
|
||||||
|
# stale shell pointing at deleted hashed assets. The more-
|
||||||
|
# specific regex location below overrides this for hashed
|
||||||
|
# static assets, which stay immutable.
|
||||||
tryFiles = "$uri $uri/ /index.html";
|
tryFiles = "$uri $uri/ /index.html";
|
||||||
|
extraConfig = ''
|
||||||
|
add_header Cache-Control "no-cache";
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# Cache static assets aggressively
|
# Cache static assets aggressively (Vite emits content-hashed filenames)
|
||||||
"~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$" = {
|
"~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$" = {
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
expires 1y;
|
expires 1y;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue