Guías y tutoriales

Cientos de tutoriales y guías paso a paso cuidadosamente escritas por nuestro equipo de soporte.

Cómo crear un proxy inverso con Nginx

En este tutorial te mostraremos cómo y por qué razones crear un denominado "proxy inverso" con el popular servidor web Nginx, hoy en día, es la opción más popular para este tipo de tareas.

Antes de empezar con el tutorial, ¿no tienes un servidor Cloud Linux en el que puedas instalar tu servidor web nginx? ¡No te preocupes! Con solo un clic, puedes desplegarlo fácilmente con SW Hosting.

cta:cloud_so

¿Qué es un proxy inverso?

Un proxy inverso o, reverse proxy en inglés, hace referencia a un servidor encargado de mostrar contenido de uno o más servidores que a su vez, permanecen ocultos del cliente o usuario.

info Por ejemplo, si pones un proxy inverso delante de una aplicación web, tus usuarios nunca interactuarán directamente con la aplicación, sino que será el proxy inverso el encargado de hacer de intermediario entre tus usuarios y la aplicación.

Los proxys inversos pueden ser una opción para incrementar la seguridad. Por ejemplo, nos permiten ocultar el verdadero servidor dónde están alojadas tus aplicaciones o también, nos permiten implementar capas de seguridad adicionales, como por ejemplo, una conexión TLS que es aplicada por el proxy, pero que no hubiera sido nativamente soportada por tu aplicación.

Asimismo, un proxy inverso resulta práctico para servir múltiples aplicaciones web desde una misma máquina. La aplicación generalmente correrá en localhost sobre puertos poco frecuentes como 4000 o 5000. Entonces, el proxy inverso escuchará los puertos 80/443 y servirá el contenido de una aplicación web u otra según el SNI o el host de la petición.

Crear un proxy inverso con Nginx, paso a paso

En primer lugar, deberás cumplir con los siguientes requisitos:

  1. Disponer de acceso root a un servidor Linux.
  2. Tener instalado y activado Nginx. Asegurarse de no tener los puertos 80 y 443 ocupados por otro proceso, como por ejemplo, Apache.
  3. Tener corriendo una aplicación web en localhost a través de un puerto arbitrario y que esté disponible (por ejemplo el puerto 4000). Esto se puede lograr fácilmente con NodeJs o .NET Core.

1. Crea un nuevo archivo de virtual host

Puedes lograrlo utilizando el editor de textos nano. Una buena ruta para hacerlo es sites-available dentro del directorio de configuración de nginx.

nano /etc/nginx/sites-available/midominio.com.conf

2. Edita el archivo y añade la configuración para el proxy inverso

file midominio.com.conf

server {
  #Escucha en el puerto 80, ipv4.
  listen 80; 
  
  #Aquí deberás introducir el nombre de tu dominio.
  server_name midominio.com;

  access_log            /var/log/nginx/midominio.com.access.log;

  location / {
      #La configuración del proxy.
      proxy_pass http://localhost:4000/;
  }
}

3. Reinicia Nginx

Para sistemas operativos basados en Debian:

systemctl reload nginx

4. Lanza tu aplicación web

Llegado a este punto deberás ejecutar tu aplicación web, si no está corriendo aún.

A largo plazo querrás ejecutarla como servicio/dominio, pero para probar será suficiente con que la ejecutes manualmente.

Por ejemplo, si tienes una aplicación NodeJS, la sintaxis es la siguiente:

node /ruta/applicacion.js

5. Accede a tu aplicación web desde el navegador

Si seguiste correctamente los pasos de este tutorial y si tu máquina no tiene otra configuración de seguridad que te obstaculice, ahora deberías ser capaz de acceder a tu aplicación desde "midominio.com" (o cualquiera que sea tu dominio).

6. Sirve tu aplicación de forma segura con un certificado TLS (encarecidamente recomendado)

Gracias a Nginx como proxy inverso, puedes fácilmente servir tus aplicaciones de forma segura a través de una conexión TLS. Para lograrlo, sólo deberemos modificar el archivo de configuración del "virtual host" de Nginx:

server {
    listen 80;
    #Redirecciona a una conexión segura.
    return 301 https://$host$request_uri;
}

server {

    listen 443;
    #Aquí deberás introducir el nombre de tu dominio.
    server_name midominio.com;

    #Aquí deberás especificar la ruta de tu certificado SSL
    ssl_certificate           /etc/ruta/al/certificado/cert.crt;
    ssl_certificate_key       /etc/ruta/al/certificado/cert.key;

    ssl on;
    ssl_session_cache  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;

    ssl_prefer_server_ciphers on;
    ssl_session_timeout  10m;

    access_log            /var/log/nginx/midominio.com.access.log;

    location / {
    
      proxy_pass          http://localhost:4000;
    }
  }

Finalmente, guarda los cambios, reinicia nginx con:

systemctl reload nginx

y vuelve a ejecutar la aplicación, si aún no la tienes como servicio o dominio.

success ¡Ya está! Si has seguido los pasos correctamente, ahora dispondrás de una aplicación web servida a través de un proxy reverso por nginx.

Recuerda que si no dispones aun de un servidor Cloud con sistema operativo Linux puedes desplegarlo fácilmente con SW Hosting.

cta:cloud_so