Generador de configuración Nginx
Responde unas pocas preguntas y obtén un bloque server de nginx limpio y comentado. Sirve para sitios estáticos, aplicaciones de una sola página, proxies inversos (con WebSockets y balanceo de carga) y PHP-FPM, además de HTTPS con ajustes TLS modernos, redirecciones, gzip, caché y cabeceras de seguridad.
Última actualización:
Configuración generada
Cómo usar Generador de configuración Nginx
- Elige el tipo de sitio: archivos estáticos, una aplicación de una sola página (React, Vue, Angular), un proxy inverso hacia un servidor de aplicaciones o PHP.
- Introduce tus nombres de dominio y la raíz de documentos o la dirección del backend.
- Configura HTTPS: mantén las rutas de Let's Encrypt o introduce tus propios archivos de certificado, y elige HTTP/2, HSTS y la redirección www que quieras.
- Ajusta el rendimiento y la seguridad: gzip, caché de recursos, cabeceras de seguridad, límite de subida y redirecciones personalizadas.
- Copia o descarga la configuración, guárdala en
/etc/nginx/sites-available/o/etc/nginx/conf.d/, ejecutasudo nginx -ty recarga nginx.
Cómo elige nginx un location
Dentro de un bloque server, nginx elige un location por petición. Conocer el orden evita la mayoría de los problemas de "¿por qué se ignora esta regla?":
- La coincidencia exacta
location = /pathgana inmediatamente. - Se recuerda la coincidencia de prefijo más largo. Si usa
^~, gana y se omiten las expresiones regulares. - Las expresiones regulares
~(distingue mayúsculas y minúsculas) y~*(no las distingue) se comprueban en el orden en que aparecen en el archivo; gana la primera coincidencia. - Si no coincide ninguna expresión regular, se usa el prefijo más largo recordado (por ejemplo,
location /).
Directivas comunes de nginx
| Directiva | Función |
|---|---|
server_name | Nombres de host a los que responde este bloque server. Usa _ para capturarlos todos. |
root / index | Carpeta que contiene los archivos y archivo que se sirve cuando se pide un directorio. |
try_files $uri $uri/ /index.html | Prueba el archivo, luego la carpeta y, si no, recurre a index.html (enrutamiento de SPA). |
return 301 https://$host$request_uri | Redirección permanente que conserva la ruta y la cadena de consulta. |
proxy_pass http://127.0.0.1:3000 | Reenvía la petición a un servidor de aplicaciones. Si incluye una parte de URI, se sustituye el prefijo coincidente. |
proxy_set_header | Pasa el Host, la IP del cliente y el protocolo al backend. |
expires 30d | Define Expires y Cache-Control: max-age para la caché del navegador. |
add_header … always | Añade una cabecera de respuesta, también en las páginas de error. Un location que define su propio add_header no hereda las cabeceras. |
client_max_body_size 20M | Subida máxima permitida (1 MB por defecto; las peticiones más grandes reciben un 413). |
gzip on | Comprime las respuestas de texto; añade los tipos MIME en gzip_types. |
Lista de comprobación para solucionar problemas
- Prueba siempre primero:
sudo nginx -tmuestra el archivo y la línea de cualquier error de sintaxis. Recarga consudo systemctl reload nginxpara no cortar las conexiones en curso. - 502 Bad Gateway: el backend no está en ejecución o escucha en otro puerto o socket. Compruébalo con
curl http://127.0.0.1:3000en el servidor y lee/var/log/nginx/error.log. - 403 Forbidden en un sitio estático: el usuario de nginx (
www-dataonginx) necesita permiso de lectura en los archivos y de ejecución en cada carpeta superior. - Sigue apareciendo la página predeterminada: elimina o desactiva
sites-enabled/default, o asegúrate de que tuserver_namecoincide con el dominio que solicitas. - Bucle de redirecciones detrás de un balanceador de carga o de Cloudflare: el proxy se comunica con nginx por HTTP, así que redirigir a HTTPS crea un bucle. Usa los ajustes HTTPS del proxy o comprueba
$http_x_forwarded_proto.
Preguntas frecuentes
¿Dónde pongo el archivo de configuración de nginx?
En Debian y Ubuntu, guárdalo como /etc/nginx/sites-available/example.com.conf y crea un enlace simbólico en /etc/nginx/sites-enabled/. En RHEL, Fedora, Alpine y la imagen oficial de Docker, guárdalo en /etc/nginx/conf.d/ con la extensión .conf. Después pruébalo con sudo nginx -t y aplícalo con sudo systemctl reload nginx.
¿Cómo redirijo HTTP a HTTPS en nginx?
Añade un bloque server que escuche en el puerto 80 para tus dominios y contenga return 301 https://$host$request_uri; (o tu dominio canónico en lugar de $host). El generador crea este bloque cuando activas HTTPS y la opción de redirección.
¿Cómo hago que nginx sirva una aplicación de una sola página de React o Vue?
Usa try_files $uri $uri/ /index.html; en location /. Las peticiones de archivos reales se sirven directamente y cualquier otra ruta recurre a index.html, para que el enrutador del lado del cliente pueda gestionarla. Elige el tipo Aplicación de una sola página para obtener esto junto con una caché adecuada.
¿Qué cabeceras debe pasar un proxy inverso al backend?
Como mínimo Host, X-Real-IP, X-Forwarded-For y X-Forwarded-Proto, para que la aplicación conozca el host original, la IP del cliente y si la petición usó HTTPS. Para WebSockets también necesitas proxy_http_version 1.1 y las cabeceras Upgrade y Connection.
¿Por qué nginx -t falla con un error de certificado?
Los archivos de ssl_certificate deben existir antes de que nginx cargue la configuración. Obtén primero el certificado (por ejemplo, sudo certbot certonly --nginx -d example.com), o empieza con HTTPS desactivado, obtén el certificado y luego activa HTTPS.
¿Debo usar listen 443 ssl http2 o http2 on?
Desde nginx 1.25.1, el parámetro http2 de listen está obsoleto en favor de la directiva independiente http2 on;. Usa la nueva sintaxis en las versiones actuales de nginx y la antigua solo para versiones anteriores, como la 1.18 o la 1.22 que incluyen algunas distribuciones.
¿Se envía algo a un servidor?
No. La configuración se genera en tu navegador y tus ajustes solo se guardan en el almacenamiento local de este navegador.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.