fix: serve service worker with no-cache headers via exact-match location

The sw.js and workbox-*.js files were being caught by the immutable
static asset regex (expires 1y), causing stale service workers and
potential 502 errors during re-registration. Use location = /sw.js
(exact match, highest Nginx priority) and a regex for workbox files
that appears before the asset cache block.

Also removes the dead duplicate location blocks at the bottom of
the config that were never reached due to regex priority.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Dorian
2026-02-13 22:16:13 +00:00
parent 5db3194d60
commit faa419fc28
2 changed files with 16 additions and 18 deletions

View File

@@ -20,7 +20,7 @@ services:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
CACHEBUST: "14" CACHEBUST: "15"
VITE_USE_MOCK_DATA: "false" VITE_USE_MOCK_DATA: "false"
VITE_CONTENT_ORIGIN: ${FRONTEND_URL} VITE_CONTENT_ORIGIN: ${FRONTEND_URL}
VITE_INDEEHUB_API_URL: /api VITE_INDEEHUB_API_URL: /api

View File

@@ -45,6 +45,21 @@ server {
add_header Content-Type application/manifest+json; add_header Content-Type application/manifest+json;
} }
# ── Service Worker — must be exact-match to avoid the immutable
# caching regex below. Browsers require fresh SW scripts.
location = /sw.js {
add_header Cache-Control "no-cache, no-store, must-revalidate";
expires off;
access_log off;
}
location ~* ^/workbox-.*\.js$ {
add_header Cache-Control "no-cache, no-store, must-revalidate";
expires off;
access_log off;
}
# Static assets — long-lived immutable cache
location ~* \.(?:js|css|woff2|woff|ttf|otf|eot|svg|png|jpg|jpeg|gif|ico)$ { location ~* \.(?:js|css|woff2|woff|ttf|otf|eot|svg|png|jpg|jpeg|gif|ico)$ {
expires 1y; expires 1y;
add_header Cache-Control "public, immutable"; add_header Cache-Control "public, immutable";
@@ -130,23 +145,6 @@ server {
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
} }
# Service Worker
location /sw.js {
add_header Cache-Control "no-cache";
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
expires off;
access_log off;
}
location /workbox-*.js {
add_header Cache-Control "no-cache";
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
expires off;
access_log off;
}
# Health check endpoint # Health check endpoint
location /health { location /health {
access_log off; access_log off;