Generador de Configuración de Nginx

Generar configuración de Nginx

Escribir configuraciones de Nginx desde cero significa recordar cada proxy_set_header, cada tipo MIME de gzip, y la diferencia entre try_files $uri/ /index.php?$args y la versión que rompe sutilmente el enrutamiento. Este generador solicita el dominio, upstream, manejador PHP y rutas SSL, luego genera un bloque de servidor con valores predeterminados sensatos para TLS, HTTP/2, caché estática y compresión.

Cómo generar tu bloque de servidor

  1. 1

    Elige un preset

    Sitio estático, PHP-FPM (Laravel, WordPress), proxy inverso de Node.js, o una simple redirección 301.

  2. 2

    Ingresa el dominio

    Incluye la lista de server_name: típicamente variantes www y no-www.

  3. 3

    Configura los detalles de SSL

    Apunta a tus archivos fullchain y privkey, o salta para usar solo HTTP.

  4. 4

    Ajusta el upstream

    Puerto, ruta de socket, o URL de backend para casos de proxy_pass.

  5. 5

    Copia y despliega

    Coloca la salida en /etc/nginx/sites-available, ejecuta nginx -t y recarga.

Cómo se ve un buen bloque de servidor

Un host virtual moderno de Nginx generalmente tiene estas piezas:

Sección Propósito
listen 443 ssl http2 Aceptar HTTPS con HTTP/2 habilitado
ssl_certificate + ssl_certificate_key Apuntar al material TLS
ssl_protocols TLSv1.2 TLSv1.3 Eliminar versiones antiguas de TLS
gzip on + tipos Comprimir texto/HTML/JSON/JS/CSS al vuelo
Encabezados expires para activos estáticos Reducir viajes de ida y vuelta de visitantes repetidos
try_files Enrutar a un controlador frontal (PHP, Laravel, etc.)
HSTS + encabezados de seguridad Mantener al navegador honesto sobre TLS

Esenciales del proxy inverso

Para aplicaciones de Node.js, Python, Ruby que se ejecutan detrás de Nginx:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Olvidar X-Forwarded-For es la forma clásica de perder las IPs reales de los clientes en los registros de tu aplicación.

Errores comunes

  • Falta de server_name de respaldo. Nginx utiliza el primer bloque de servidor como predeterminado si no coincide ningún nombre. Coloca un bloque server_name _ que devuelva 444 para evitar ataques de encabezado de host.
  • Orden incorrecto del certificado. El archivo ssl_certificate debe ser fullchain (hoja + intermedios), no solo la hoja.
  • Caché demasiado ansiosa. Enviar expires 1y en /index.html arruinará los despliegues. Versiona las URL de los activos en su lugar.
  • Sin prueba antes de recargar. Siempre ejecuta nginx -t antes de systemctl reload nginx: un error de sintaxis lleva el sitio fuera de línea.

Preguntas frecuentes

HTTP/2 es estable y universalmente soportado en Nginx 1.25+. HTTP/3 (QUIC) está disponible en Nginx 1.25+ como experimental. Para una configuración de producción en 2025, habilita HTTP/2 y opcionalmente añade HTTP/3 con las directivas http3 y quic.

La convención es /etc/ssl/certs/ para cadenas públicas y /etc/ssl/private/ para claves. Let’s Encrypt coloca todo bajo /etc/letsencrypt/live/domain/. Usa lo que tu herramienta de renovación espera.

Sí, para la mayoría de los sitios. Agrega un bloque de servidor separado en el puerto 80 que devuelva 301 https://$host$request_uri. Combinado con HSTS, el bloque HTTP apenas se activará después de la primera solicitud.

Ejecuta sudo nginx -t para analizar la configuración sin recargar. Si imprime “syntax is ok” y “test is successful”, recarga con sudo systemctl reload nginx. Nunca uses restart en producción: la recarga aplica los cambios sin interrumpir el servicio.

Herramientas relacionadas

Herramienta disponible en otros idiomas