Guía completa de Nginx: instalación, configuración y uso como proxy inverso

Introducción a Nginx

Nginx (pronunciado «engine‑ex») es un servidor web y proxy inverso de alto rendimiento que ha ganado popularidad por su capacidad para manejar miles de conexiones simultáneas con bajo consumo de recursos. Originalmente creado por Igor Sysoev en 2004 para resolver el problema de los servidores web tradicionales bajo cargas pesadas, hoy Nginx impulsa una parte significativa de los sitios más visitados del mundo. En este artículo aprenderás a instalarlo en una distribución Linux, configurarlo como servidor web estático, usarlo como proxy inverso y aplicarlo como balanceador de carga, además de revisar buenas prácticas de seguridad.

Instalación en Linux

La forma más sencilla de instalar Nginx en distribuciones basadas en Debian/Ubuntu es mediante el gestor de paquetes APT:

  • Actualiza el índice de paquetes: sudo apt update
  • Instala Nginx: sudo apt install nginx
  • Verifica que el servicio esté activo: systemctl status nginx

En distribuciones RHEL/CentOS/Fedora se usa DNF o YUM:

  • Instala el repositorio EPEL (si es necesario): sudo dnf install epel-release
  • Instala Nginx: sudo dnf install nginx
  • Habilita e inicia el servicio: sudo systemctl enable --now nginx

Tras la instalación, el puerto 80 (HTTP) y, si se habilita SSL, el 443 (HTTPS) quedarán abiertos por defecto. Puedes probarlo accediendo a http://tu_ip_o_dominio desde un navegador y deberías ver la página de bienvenida de Nginx.

Configuración básica como servidor web estático

Los archivos de configuración de Nginx se encuentran en /etc/nginx/. El archivo principal es nginx.conf, pero lo más común es crear bloques server dentro de /etc/nginx/sites-available/ y enlazarlos a /etc/nginx/sites-enabled/.

Ejemplo de un sitio simple que sirve archivos estáticos desde /var/www/mi-sitio:

server {
    listen 80;
    server_name ejemplo.com www.ejemplo.com;
    root /var/www/mi-sitio;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

Después de crear o editar el archivo, verifica la sintaxis con sudo nginx -t y recarga la configuración: sudo systemctl reload nginx.

Uso como proxy inverso

Uno de los usos más potentes de Nginx es actuar como intermediario entre el cliente y una o más aplicaciones backend (por ejemplo, un servidor Node.js, Python/Flask o una API REST). En este rol, Nginx recibe la petición HTTP, la reenvía al proceso backend y devuelve la respuesta al cliente.

Configuración básica de proxy inverso para una aplicación que escucha en el puerto 3000:

server {
    listen 80;
    server_name app.ejemplo.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

Las directivas proxy_set_header aseguran que la aplicación backend reciba información correcta sobre el cliente original, lo cual es esencial para registro y generación de enlaces absolutos.

Balanceo de carga con upstream

Cuando tienes varias instancias de una aplicación, Nginx puede distribuir el tráfico entre ellas usando un bloque upstream. Esto mejora la disponibilidad y la capacidad de respuesta.

upstream nodos_app {
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

server {
    listen 80;
    server_name balanceo.ejemplo.com;
    location / {
        proxy_pass http://nodos_app;
        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;
    }
}

Por defecto, Nginx usa un algoritmo de round‑robin, pero puedes especificar otros como least_conn (menos conexiones activas) o ip_hash (sesiones persistentes basada en la IP del cliente).

Seguridad y mejores prácticas

  • SSL/TLS: Obtén un certificado gratuito con Let’s Encrypt usando Certbot y configura Nginx para escuchar en el puerto 443 con las directivas ssl_certificate y ssl_certificate_key.
  • Limitar métodos HTTP: Si tu API solo necesita GET y POST, bloquea los demás con if ($request_method !~ ^(GET|POST)$) { return 405; }.
  • Rate limiting: Protege tu backend de abusos usando limit_req_zone y limit_req dentro de los bloques location.
  • Ocultar versiones: Añade server_tokens off; en nginx.conf para evitar que Nginx revele su número de versión en las respuestas.
  • Mantén actualizado: Suscríbete a las listas de seguridad de tu distribución y aplica sudo apt upgrade nginx (o el equivalente) con regularidad.

Conclusión

Nginx es una pieza fundamental en la infraestructura web moderna gracias a su rendimiento, flexibilidad y bajo consumo de recursos. Ya sea que lo uses como servidor web estático, como proxy inverso para aplicaciones dinámicas o como balanceador de carga frente a un clúster de servidores, su configuración es clara y su documentación abundante. Siguiendo los pasos y buenas prácticas descritas en este artículo podrás desplegar un entorno robusto y seguro en cualquier distribución Linux, listo para escalar según crezca tu tráfico.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol