map $sent_http_content_type $cache_control_strategy { default "public, max-age=2592000"; ~^text/html "no-store, must-revalidate"; ~^text/css "public, max-age=31536000, immutable"; ~^application/javascript "public, max-age=31536000, immutable"; ~^application/json "no-store, must-revalidate"; ~^image/ "public, max-age=2592000"; ~^font/ "public, max-age=31536000, immutable"; } server { listen 80 default_server; server_name _; root /usr/share/nginx/html; index index.html; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; add_header Cache-Control $cache_control_strategy always; location / { try_files $uri $uri/ $uri.html $uri/index.html =404; } location /_astro/ { access_log off; expires 1y; } location ~* \.(webp|avif|jpg|jpeg|png|gif|svg|ico|woff2?|ttf|otf|eot)$ { access_log off; expires 30d; } gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml; error_page 404 /404.html; location = /404.html { internal; } }