server { listen 80; server_name _; root /usr/share/nginx/html; index index.html; # go_router owns the URL, so any path that is not a real file has to come # back as index.html rather than a 404 — otherwise a reload on /permissions # or a shared link lands on nothing. location / { try_files $uri $uri/ /index.html; } # Build output is content-hashed, the shell is not: caching index.html or # the service worker would pin returning workers to the previous release. location = /index.html { add_header Cache-Control "no-cache, no-store, must-revalidate"; } location = /flutter_service_worker.js { add_header Cache-Control "no-cache, no-store, must-revalidate"; } gzip on; gzip_types text/plain text/css application/javascript application/json image/svg+xml application/wasm; gzip_min_length 1024; }