Skip to main content

Command Palette

Search for a command to run...

Nginx: configura tu propio servidor web desde cero

Tiempo de lectura: 9 minutos Categoría: Linux · Sysadmin Nivel: Principiante / Intermedio

Published
5 min read

Nginx es el servidor web más usado del mundo. Sirve más del 30% de todos los sitios web de internet y es la primera elección de empresas como Netflix, Cloudflare y Airbnb para servir contenido estático y como proxy inverso. En este artículo te explico cómo instalarlo, configurarlo y poner en marcha tu propio servidor web en Linux.

¿Qué es Nginx y en qué se diferencia de Apache?

Nginx nació para resolver un problema específico que tenía Apache: el modelo de proceso por conexión no escalaba bien con muchas conexiones simultáneas. Nginx usa un modelo asíncrono orientado a eventos que le permite manejar miles de conexiones simultáneas con un consumo de memoria mucho menor.

Para contenido estático como archivos HTML, imágenes, CSS y JavaScript, Nginx es significativamente más rápido que Apache. Para aplicaciones dinámicas ambos son comparables, aunque Nginx se usa frecuentemente como proxy inverso delante de un servidor de aplicaciones como Gunicorn, uWSGI o Node.js.

Nginx también destaca como balanceador de carga y como servidor de caché, funcionalidades que lo hacen valioso más allá de simplemente servir archivos.

Instalar Nginx

En Ubuntu y Debian Nginx está en los repositorios oficiales y se instala con apt. En Arch con pacman y en Fedora con dnf. También hay un repositorio oficial de Nginx con versiones más actualizadas si necesitas las últimas funcionalidades.

Tras la instalación inicia el servicio y habilítalo para que arranque automáticamente con systemctl. Verifica que está corriendo con systemctl status nginx.

Si tienes el firewall ufw activo necesitas permitir el tráfico HTTP y HTTPS con ufw allow. Nginx registra automáticamente perfiles en ufw durante la instalación.

Abre el navegador y ve a la IP de tu servidor. Deberías ver la página de bienvenida de Nginx.

La estructura de configuración

La configuración de Nginx vive en el directorio /etc/nginx. El archivo principal es nginx.conf que contiene la configuración global. Las configuraciones de los sitios virtuales se colocan en el directorio sites-available y se activan creando enlaces simbólicos en sites-enabled.

Esta separación entre available y enabled permite tener configuraciones preparadas que se activan o desactivan fácilmente sin borrar nada.

El archivo nginx.conf incluye al final todos los archivos del directorio sites-enabled, por eso el sistema funciona. La directiva worker_processes controla cuántos procesos worker lanza Nginx, normalmente se pone en auto para que use todos los cores disponibles.

Configurar un servidor virtual básico

Para servir un sitio web crea un archivo de configuración en sites-available con el nombre de tu dominio. Un bloque server básico define el puerto donde escucha, el nombre del dominio, el directorio raíz donde están los archivos del sitio y el archivo índice por defecto.

El directorio raíz suele estar en /var/www/nombredeldominio/html. Créalo con mkdir y dale los permisos correctos para que Nginx pueda leerlo.

Activa el sitio creando un enlace simbólico desde sites-available a sites-enabled. Verifica que la configuración no tiene errores con nginx -t, que es un comando muy útil que deberías ejecutar siempre antes de recargar. Si todo está correcto recarga Nginx con systemctl reload nginx.

SSL con Let's Encrypt y Certbot

Un sitio web sin HTTPS no es aceptable hoy en día. Let's Encrypt ofrece certificados SSL gratuitos y Certbot automatiza todo el proceso de obtención y renovación.

Instala Certbot y el plugin de Nginx con apt. Ejecuta certbot --nginx con el flag -d seguido de tu dominio. Certbot se encarga de obtener el certificado, modificar tu configuración de Nginx para usar SSL y configurar la redirección de HTTP a HTTPS automáticamente.

Certbot también configura la renovación automática del certificado. Los certificados de Let's Encrypt caducan cada 90 días pero Certbot los renueva automáticamente antes de que expiren. Puedes verificar que el temporizador de renovación está activo con systemctl status certbot.timer.

Proxy inverso

Una de las configuraciones más comunes de Nginx es como proxy inverso delante de una aplicación. Por ejemplo si tienes una aplicación Node.js corriendo en el puerto 3000 pero quieres servirla en el puerto 80 con tu dominio, Nginx actúa como intermediario.

En el bloque server añades una location que redirige todas las peticiones a la aplicación usando la directiva proxy_pass con la dirección local donde corre la aplicación. Nginx también añade cabeceras importantes para que la aplicación sepa la IP real del cliente y el protocolo original.

Optimizaciones importantes

Habilitar la compresión gzip reduce significativamente el tamaño de las respuestas de texto. En el archivo nginx.conf activa gzip on y especifica los tipos de contenido que quieres comprimir. Esto mejora notablemente los tiempos de carga especialmente en conexiones lentas.

La caché del navegador para archivos estáticos evita descargas innecesarias. Con la directiva expires en el bloque location de archivos estáticos le dices al navegador cuánto tiempo puede cachear cada tipo de archivo. Las imágenes y fuentes que cambian raramente pueden tener una caducidad de un año, mientras que el CSS y JavaScript depende de tu flujo de despliegue.

Los logs de Nginx van por defecto a /var/log/nginx/access.log y error.log. Revísalos cuando algo no funciona, son muy detallados y generalmente te dicen exactamente qué está fallando.

Conclusión

Nginx es una herramienta fundamental para cualquier persona que administre servidores web. Su combinación de alto rendimiento, configuración flexible y la facilidad de configurar SSL con Certbot lo hacen la opción predeterminada para la mayoría de proyectos.

Una vez que tienes el servidor básico funcionando puedes explorar funcionalidades más avanzadas como el balanceo de carga, la caché de proxy y la limitación de velocidad de peticiones.


¿Usas Nginx, Apache o Caddy? Caddy en particular está ganando popularidad por su configuración automática de HTTPS.