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 la opción más popular para este tipo de tareas.

¿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.

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 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 un 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. Editar el archivo y añade la configuración para el proxy inverso.

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 / demonio, 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 obstaculizara, 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 finalmente vuelve a ejecutar la aplicación si aún no la tienes como servicio o demonio.

¡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.

Utilizamos cookies para proporcionar nuestros servicios y para análisis y marketing. Para obtener más información sobre nuestro uso de cookies, consulte nuestra Información cookies. Al continuar navegando en nuestro sitio web, usted acepta nuestro uso de cookies.