# Server block de recordaLexia para el nginx NATIVO de la VM. # Instalación: copiar a /etc/nginx/sites-available/recordalexia, enlazar en # sites-enabled, y emitir el certificado con: # sudo certbot --nginx -d recordalexia.jaumegar.work # (certbot reescribe este fichero añadiendo el bloque TLS y la redirección 80→443) # # El upstream es el contenedor frontend del compose de producción, que solo # escucha en loopback: este nginx es la única puerta de entrada. server { listen 80; listen [::]:80; server_name recordalexia.jaumegar.work; # Subidas holgadas (la app apenas sube nada, pero evitamos el 413 histórico). client_max_body_size 16m; # --- Cabeceras de seguridad (spec production-hardening) --- add_header X-Content-Type-Options nosniff always; add_header Content-Security-Policy "frame-ancestors 'none'" always; add_header Referrer-Policy strict-origin-when-cross-origin always; add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; location / { proxy_pass http://127.0.0.1:8089; proxy_http_version 1.1; proxy_set_header Host $host; # La IP real del cliente: el rate-limiter del backend la usa como clave. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # El service worker y el manifest no deben quedar cacheados por intermediarios # de forma agresiva: la PWA se actualiza comprobándolos. location = /ngsw-worker.js { proxy_pass http://127.0.0.1:8089; proxy_set_header Host $host; add_header Cache-Control "no-cache" always; } }