server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; index index.html; # Compressão para texto/JS/CSS. gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied any; gzip_types text/plain text/css application/javascript application/json image/svg+xml application/xml application/xml+rss; # Assets com hash (Vite -> /assets/*.[hash].*): cache longo e imutável. location /assets/ { expires 1y; add_header Cache-Control "public, immutable"; try_files $uri =404; } # SPA fallback: qualquer rota/refresh devolve index.html. location / { try_files $uri $uri/ /index.html; } # index.html nunca em cache (garante deploy fresco). location = /index.html { add_header Cache-Control "no-cache, no-store, must-revalidate"; } # Páginas de erro também caem no SPA. error_page 404 /index.html; }