Nginx sirve el 34 % de los sitios activos según Netcraft: es el reverse proxy y servidor estático más usado del mundo. Este generador de configuración Nginx crea bloques `server` listos para producción con SSL de Let's Encrypt, HTTP/2, HSTS, gzip, redirects 80→443 y proxy_pass hacia tu backend, siguiendo las cabeceras recomendadas por Mozilla Observatory.
TLS moderno: qué versiones y ciphers habilitar
Deshabilita TLS 1.0 y 1.1 (obsoletos e inseguros) y sirve sólo TLS 1.2 y 1.3. Usa las suites recomendadas por Mozilla en su perfil Intermediate: son compatibles con navegadores desde Firefox 27 y Chrome 31 y obtienen A+ en SSL Labs. Habilita OCSP stapling y ssl_session_cache para acelerar el handshake.
HTTP/2, HTTP/3 y compresión
HTTP/2 multiplexa múltiples peticiones en una única conexión TCP y comprime cabeceras (HPACK): reduce latencia sobre todo en apps con muchos recursos. Nginx lo activa con `listen 443 ssl http2;`. Para HTTP/3 (QUIC sobre UDP) necesitas Nginx 1.25+ compilado con quiche o similar. Añade gzip para textos y considera brotli (nginx-module-brotli) para un 20 % extra de compresión.
Reverse proxy: cabeceras que debes pasar
Al hacer proxy_pass a un backend (Node, Python, Go) tu app pierde la IP real del cliente y el protocolo original salvo que reenvíes las cabeceras: X-Real-IP, X-Forwarded-For, X-Forwarded-Proto y Host. Sin ellas, tu logging registra 127.0.0.1 y tus redirects HTTPS pueden romperse. Además define proxy_read_timeout adecuado para requests largos.
Seguridad: cabeceras que deberías enviar
Añade `Strict-Transport-Security: max-age=63072000; includeSubDomains; preload` para forzar HTTPS en el navegador, `X-Content-Type-Options: nosniff`, `Referrer-Policy: strict-origin-when-cross-origin` y una `Content-Security-Policy` estricta. Verifica todo en Mozilla Observatory y SSL Labs para llegar a A+.
Casos de uso comunes
- Publicar una app Node/Python detrás de HTTPS en un VPS.
- Consolidar varios subdominios en un solo servidor Nginx.
- Servir un SPA estático con fallback a index.html (`try_files $uri /index.html`).
- Balancear carga entre varias instancias de una API.
Buenas prácticas
- Renueva certificados automáticamente con certbot y un cron/timer systemd.
- Activa gzip solo para tipos MIME comprimibles; nunca para binarios.
- Limita tamaño de body con client_max_body_size según tu caso.
- Registra logs en formato JSON para ingesta directa en Elasticsearch/Loki.