server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ =404; } # Cache JavaScript files with version query params for 1 year (immutable) # Files without version params are not cached location ~* \.(js|mjs)(\?v=[^&]+)?$ { if ($args ~ "v=") { # Has version param - cache for 1 year (immutable) add_header Cache-Control "public, max-age=31536000, immutable"; } if ($args !~ "v=") { # No version param - don't cache add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; } add_header Vary "Accept-Encoding"; } location = /version.json { add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; } # Prevent caching of HTML location ~* \.html$ { add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; } # Enable gzip compression gzip on; gzip_types text/html text/css application/javascript; gzip_min_length 1000; }