🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo instalar Nginx en Linux y configurar un proxy inverso

Actualizado el 4 de octubre de 2025

¿Qué es Nginx y por qué necesitas un proxy inverso?

Antes de ensuciarnos las manos con la terminal, vamos a poner los conceptos claros. Nginx (se pronuncia "engine-x") es un servidor web de alto rendimiento que, además de servir páginas estáticas, es famoso por su capacidad para funcionar como proxy inverso.

Un proxy inverso es un intermediario entre los clientes (los navegadores de tus usuarios) y tus servidores backend (como Node.js, Python, o incluso otros servidores web). En lugar de que el usuario haga la petición directamente a tu aplicación, la hace al proxy, y este decide a qué servidor interno enviarla.

¿Por qué es esto útil? Porque te permite:

  • Ocultar la arquitectura interna: Los usuarios solo ven la IP de Nginx.
  • Balancear la carga: Repartir el tráfico entre varios servidores para evitar caídas.
  • Terminar SSL/TLS: Manejar los certificados HTTPS en un solo punto.
  • Servir contenido estático: Nginx es rapidísimo con imágenes, CSS y JavaScript, liberando a tu aplicación de ese trabajo.

En esta guía, vamos a instalar Nginx en Linux (usaremos Ubuntu/Debian, pero los comandos son muy similares en otras distros) y a configurar un proxy inverso paso a paso. Al final, tendrás un servidor proxy funcionando para redirigir peticiones a una aplicación local.


Requisitos previos

Para seguir este tutorial, necesitas:

  • Un servidor o máquina virtual con Linux (Ubuntu 22.04 o 24.04 recomendado).
  • Acceso a una terminal con permisos de superusuario (sudo).
  • Una aplicación web corriendo en un puerto local (por ejemplo, http://localhost:3000). Si no tienes una, puedes usar un servicio simple de prueba como python3 -m http.server 3000.

[INFO] Si estás usando un panel de control como Syspanel (antes conocido como HestiaCP), recuerda que el acceso a su interfaz web es a través del puerto 2106. Sin embargo, para esta guía, trabajaremos directamente con la terminal, ya que es la forma más flexible de configurar Nginx.


Paso 1: Instalar Nginx en Linux

El primer paso es sencillo. Vamos a actualizar los repositorios de paquetes e instalar Nginx.

Abre tu terminal y ejecuta:

sudo apt update
sudo apt install nginx -y

Una vez terminada la instalación, el servicio debería arrancar automáticamente. Verifícalo con:

sudo systemctl status nginx

Deberías ver un mensaje que dice active (running). Si no está activo, inícialo con:

sudo systemctl start nginx

Para que se inicie automáticamente al arrancar el sistema:

sudo systemctl enable nginx

Ahora, abre tu navegador y escribe la IP de tu servidor (o localhost si estás en tu máquina local). Deberías ver la página de bienvenida por defecto de Nginx. ¡Ya tienes Nginx funcionando!

[TIP] Si tienes un firewall (como UFW), necesitas permitir el tráfico HTTP y HTTPS. Ejecuta: sudo ufw allow 'Nginx Full'


Paso 2: Entender la estructura de archivos de Nginx

Antes de configurar nginx, es crucial entender dónde están los archivos. En Ubuntu/Debian, la estructura es la siguiente:

  • /etc/nginx/nginx.conf: El archivo de configuración principal.
  • /etc/nginx/sites-available/: Aquí se guardan las configuraciones de los sitios o "server blocks". Están desactivadas por defecto.
  • /etc/nginx/sites-enabled/: Contiene enlaces simbólicos a los archivos de sites-available que están activos.
  • /var/www/html/: El directorio web por defecto.

La lógica es simple: creas un archivo en sites-available, y luego creas un enlace simbólico en sites-enabled para activarlo. Esto te permite tener muchos sitios configurados pero solo activar los que necesites.


Paso 3: Crear un server block (o virtual host)

Un server block es la directiva de Nginx que define cómo responder a las peticiones de un dominio o puerto específico. Vamos a crear uno para nuestro proxy inverso.

Imagina que tienes una aplicación corriendo en el puerto 3000 (por ejemplo, un servidor Node.js). Queremos que cuando alguien visite http://midominio.com, Nginx redirija el tráfico a http://localhost:3000.

Primero, creamos el archivo de configuración:

sudo nano /etc/nginx/sites-available/mi-app

Dentro del archivo, pega lo siguiente:

server {
    listen 80;
    server_name midominio.com www.midominio.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Vamos a desglosar esto:

  • listen 80;: Le dice a Nginx que escuche en el puerto 80 (HTTP).
  • server_name: Define el dominio que usará este bloque. Puedes usar _ para capturar cualquier dominio, pero es mejor ser específico.
  • location /: Esta directiva aplica a todas las peticiones que lleguen a la raíz del sitio.
  • proxy_pass: La clave. Aquí le decimos a Nginx a dónde debe enviar las peticiones. En este caso, a http://localhost:3000.
  • proxy_set_header: Estas líneas son importantes para que la aplicación backend sepa la IP real del usuario y mantenga conexiones WebSocket si las usa.

[WARNING] Si tu aplicación no usa WebSockets, puedes omitir las líneas de Upgrade y Connection, pero no hacen daño tenerlas.

Ahora, guardamos el archivo (en nano: Ctrl+O, Enter, Ctrl+X).


Paso 4: Activar el server block

Como mencionamos, debemos crear un enlace simbólico en sites-enabled:

sudo ln -s /etc/nginx/sites-available/mi-app /etc/nginx/sites-enabled/

Para evitar conflictos, es recomendable eliminar el enlace simbólico del sitio por defecto:

sudo rm /etc/nginx/sites-enabled/default

Ahora, probemos la configuración para asegurarnos de que no hay errores de sintaxis:

sudo nginx -t

Si todo está bien, verás un mensaje como syntax is ok y test is successful.

Finalmente, recargamos Nginx para aplicar los cambios:

sudo systemctl reload nginx

Paso 5: Probar el proxy inverso

Para probar, asegúrate de que tu aplicación backend esté corriendo en el puerto 3000. Si no tienes una, puedes usar un simple servidor Python:

python3 -m http.server 3000

Ahora, en tu navegador, visita http://midominio.com (o la IP de tu servidor si estás probando localmente). Deberías ver el contenido de tu aplicación.

Si estás probando desde la misma máquina, puedes usar curl para verificar:

curl -I http://localhost

Deberías obtener una respuesta HTTP/1.1 200 OK o similar.

¡Felicidades, ya tienes un proxy inverso nginx funcionando!


Paso 6: Configuraciones avanzadas (opcional)

Balanceo de carga

Si tienes varias instancias de tu aplicación, puedes usar el bloque upstream para definir un grupo de servidores y repartir la carga.

upstream backend {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

server {
    listen 80;
    server_name midominio.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

Nginx repartirá las peticiones entre los tres puertos de forma automática.

Añadir SSL/HTTPS

Para esto, necesitas un certificado. La forma más fácil es con certbot.

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d midominio.com

Certbot modificará automáticamente tu configuración de Nginx para añadir SSL y redirigir el tráfico HTTP a HTTPS.


Paso 7: Solución de problemas comunes

  • Error 502 Bad Gateway: Suele significar que Nginx no puede conectarse al backend. Verifica que tu aplicación esté corriendo y que el puerto en proxy_pass sea el correcto.
  • Error 404 Not Found: Si ves esto, puede ser que el server_name no coincida con la URL que escribes. Revisa que el dominio apunte a tu servidor.
  • Permiso denegado: Asegúrate de que los archivos de configuración tengan permisos de lectura. Ejecuta sudo chmod 644 /etc/nginx/sites-available/mi-app.

Preguntas frecuentes (FAQ)

¿Cómo desinstalo Nginx si ya no lo necesito?

Puedes eliminarlo con:

sudo apt remove nginx nginx-common

Y si quieres limpiar los archivos de configuración:

sudo apt purge nginx nginx-common

¿Puedo usar Nginx en Windows?

Sí, existe una versión para Windows, pero es menos estable y no recomendada para producción. Esta guía está enfocada en Linux.

¿Qué pasa si tengo otro servidor web como Apache?

Debes detener Apache antes de iniciar Nginx, ya que ambos intentarán usar el puerto 80. Puedes desactivar Apache con sudo systemctl stop apache2 y sudo systemctl disable apache2.

¿Cómo hago que Nginx sirva archivos estáticos directamente?

Puedes añadir una ubicación específica para archivos estáticos en tu server block:

location /static/ {
    alias /var/www/mi-app/static/;
}

Esto hará que Nginx sirva los archivos de /static/ directamente, sin pasar por el proxy.

¿Necesito reiniciar Nginx cada vez que cambio la configuración?

No, con sudo systemctl reload nginx es suficiente. Esto recarga la configuración sin cortar las conexiones activas.


Conclusión

Has aprendido a instalar nginx en Linux y a configurar un proxy inverso de principio a fin. Esto es una habilidad fundamental para cualquier administrador de sistemas, ya que te permite gestionar el tráfico de manera eficiente, mejorar la seguridad y escalar tus aplicaciones.

Recuerda que la práctica es clave. Juega con diferentes configuraciones, prueba el balanceo de carga y no tengas miedo de romper algo: siempre puedes volver a cargar la configuración original.

Si usas Syspanel para gestionar tus servidores, recuerda que su interfaz está en el puerto 2106, pero para tareas avanzadas como esta, la terminal te dará mucho más control.

¡Ahora ve y configura tu propio proxy inverso! Tu futuro yo (y tus usuarios) te lo agradecerán.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel