Cómo configurar un proxy inverso NGINX en 2024

Cómo configurar un proxy inverso NGINX en 2024

NGINX es un servidor web de alto rendimiento ampliamente reconocido por su estabilidad, riqueza de funciones y bajo consumo de recursos. 

Como proxy inverso, actúa como intermediario para las peticiones de los clientes a los servidores back-end, mejorando la seguridad, el rendimiento y la escalabilidad de las aplicaciones web.

En este artículo, aprenderás sobre el servidor proxy inverso NGINX, su papel en las arquitecturas web modernas y los pasos para configurarlo. 

Te guiaremos a través del proceso de instalación y configuración para garantizar que tus aplicaciones se ejecuten de forma más eficiente y segura.

Un proxy inverso NGINX es una configuración de servidor que dirige el tráfico entrante a varios servidores back-end en función de la URL, garantizando una distribución eficaz de la carga y la accesibilidad a los recursos.

Un servidor proxy inverso NGINX va más allá de la simple redirección del tráfico, ya que desempeña un papel crucial en la mejora del rendimiento de las aplicaciones web. 

Gestiona hábilmente tanto el contenido dinámico como el estático, dirigiéndolos a los servidores adecuados para un procesamiento y entrega óptimos.

Con NGINX Plus, los usuarios acceden a funciones mejoradas, como un equilibrio de carga superior, amplias capacidades de supervisión y medidas de seguridad reforzadas.

En entornos Kubernetes, NGINX destaca como controlador de entrada, orquestando el acceso externo a los servicios, un componente clave en el despliegue de aplicaciones escalables nativas de la nube.

Además, NGINX mejora la eficiencia de la red gracias a su funcionalidad de pasarela API, que simplifica la gestión del tráfico de red y garantiza un enrutamiento fiable a los servicios ascendentes.

Cómo funciona un proxy inverso NGINX

En esencia, el proxy inverso NGINX actúa como puente entre los dispositivos cliente y los servidores back-end, como LiteSpeed o Apache, gestionando las peticiones entrantes en una configuración de proxy inverso.

Proceso de tramitación de solicitudes

Cuando un dispositivo cliente envía peticiones HTTP a tu aplicación web, estas peticiones llegan primero al servidor proxy inverso NGINX. A continuación, NGINX examina los detalles de la solicitud, como la URL y las cabeceras, para determinar la gestión adecuada.

Para las peticiones de contenido estático, NGINX optimiza la entrega sirviendo el contenido desde su caché, reduciendo significativamente los tiempos de carga. 

Mientras tanto, las solicitudes de contenido dinámico que requieren procesamiento en tiempo real se reenvían al servidor back-end apropiado.

Toma de decisiones para el reenvío de servidores back-end

NGINX utiliza varios métodos de equilibrio de carga para decidir a qué servidor back-end reenviar las peticiones, como por ejemplo:

  • Rotatorio: distribuye las peticiones uniformemente entre todos los servidores, evitando que un solo servidor se sobrecargue.
  • Menos conexiones: envía las peticiones al servidor con menos conexiones activas, lo que es adecuado para conexiones de larga duración.
  • Hash de IP: asigna las peticiones en función de las direcciones IP de los clientes, garantizando que el usuario interactúe siempre con el mismo servidor, lo que puede ser útil para la persistencia de la sesión.

Configuraciones avanzadas

Para escenarios complejos, puedes configurar reglas NGINX basadas en cabeceras de petición, tipo de contenido e incluso módulos de código personalizados, lo que permite tomar decisiones de reenvío precisas.

Esta adaptabilidad permite a NGINX dirigir eficazmente el tráfico a los servidores web y de aplicaciones, y funciona como proxy de reenvío para las peticiones salientes cuando está configurado para ello.

Requisitos previos para configurar un servidor proxy inverso NGINX

Antes de configurar un proxy inverso NGINX en un servidor privado virtual (VPS), asegúrate de que dispones de los siguientes elementos esenciales para una configuración eficaz y sin problemas:

  • Acceso al servidor: necesitarás acceso root o sudo a tu VPS para instalar software y modificar archivos de configuración.
  • Nombre de dominio: lo ideal es que tengas dominio web que apunte a la dirección IP de tu VPS. Esta configuración permite acceder a tu servidor proxy inverso NGINX utilizando un nombre de dominio en lugar de una única dirección IP.
  • Servidores back-end: la función principal de un proxy inverso es dirigir el tráfico a uno o varios servidores back-end, como un servidor Apache. Asegúrate de que tus servidores back-end están correctamente configurados y en funcionamiento antes de proceder a la configuración del proxy inverso NGINX.
  • Configuración de red: tu VPS debe estar configurado para permitir el tráfico HTTP y HTTPS. Ajusta la configuración de tu cortafuegos para permitir conexiones en los puertos 80 (HTTP) y 443 (HTTPS).
  • Comprensión de la configuración de NGINX: familiarízate con la sintaxis de configuración por defecto de NGINX, ya que configurar proxies inversos implica modificar los archivos de configuración.
  • Certificados SSL (opcional pero recomendado): para las conexiones HTTPS, considera la posibilidad de obtener un certificado SSL para tu dominio. El cifrado asegura los datos transmitidos entre el cliente y el proxy inverso.

Cómo configurar NGINX como proxy inverso

Te guiaremos a través de la configuración de un proxy inverso NGINX en un plan VPS de Hostinger que ejecuta una distribución Ubuntu 22.04.

1. Instala NGINX

Para configurar un proxy inverso NGINX, primero tienes que instalar el servidor NGINX en tu VPS. Sigue estos pasos para poner en marcha NGINX:

  1. Abre PuTTY o tu cliente SSH preferido e inicia sesión en el VPS utilizando tus credenciales.
  2. Actualiza y mejora los paquetes de tu servidor para evitar posibles conflictos y asegurarte de que tienes los últimos parches de seguridad con estos comandos de Linux:
sudo apt update
sudo apt upgrade -y 
  1. Instala la última versión de NGINX mediante el gestor de paquetes ejecutando:
sudo apt install nginx -y
  1. NGINX debería iniciarse automáticamente tras la instalación. Para comprobar que NGINX se está ejecutando, utiliza:
sudo systemctl status nginx

La salida debería indicar que el servicio NGINX está activo (en ejecución), de forma similar al ejemplo siguiente:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2024-01-01 12:34:56 UTC; 2min 22s ago
     Docs: man:nginx(8)
 Main PID: 1234 (nginx)
    Tasks: 2 (limit: 1152)
   Memory: 5.3M
   CGroup: /system.slice/nginx.service
           ├─1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─1235 nginx: worker process

Si tu VPS tiene configurado un cortafuegos, también tienes que permitir el tráfico a NGINX. Para los sistemas de cortafuegos sin complicaciones (UFW), habilita el tráfico en los puertos adecuados con:

sudo ufw allow 'Nginx Full'

2. Ajusta la estructura de archivos

Cuando instalas NGINX, el sistema establece automáticamente varios directorios y archivos esenciales para su configuración y funcionamiento.

Organizar los archivos de configuración de NGINX es crucial para adaptar su funcionalidad a necesidades específicas, como gestionar diversas cargas de trabajo y dirigir eficazmente las peticiones a varios servidores.

Estructura básica del archivo de configuración de NGINX

El archivo de configuración principal de NGINX es nginx.conf, que se encuentra en /etc/nginx/. Este archivo contiene ajustes globales e incluye directivas para extraer configuraciones adicionales de otros archivos y directorios:

  • /etc/nginx/nginx.conf: el archivo principal de configuración de NGINX.
  • /etc/nginx/sites-available/.: almacena posibles configuraciones de hosts virtuales. Cada archivo representa un sitio distinto, que puede activarse o desactivarse individualmente.
  • /etc/nginx/sites-enabled/.: contiene enlaces simbólicos a las configuraciones en sites-available que deseas que utilice NGINX. Sólo están activas las configuraciones enlazadas en este directorio.
  • /etc/nginx/conf.d/.: generalmente contiene configuraciones globales aplicables a todos los sitios. Los archivos que terminan en .conf dentro de este directorio se incluyen automáticamente en la configuración principal de NGINX.

Directivas importantes de NGINX

Para utilizar eficazmente NGINX, debes familiarizarte con sus directivas clave:

  • server: define un bloque de servidor. Cada bloque de servidor puede alojar un sitio web o una parte de un sitio web. Incluye directivas como listen y server_name.
  • location: define cómo procesar las peticiones de distintos recursos dentro de un bloque de servidor. Los bloques de ubicación pueden especificar el contenido web y la configuración del proxy.

3. Configura NGINX como proxy inverso

Para configurar NGINX como proxy inverso, debes crear un nuevo archivo de configuración. Este archivo contendrá los bloques de servidor y las directivas necesarias para enrutar las peticiones. Sigue estos pasos:

  1. Navega hasta el directorio de configuración:
cd /etc/nginx/sites-available/
  1. Utiliza un editor de texto como nano para crear un archivo de configuración con el nombre de tu sitio, por ejemplo:
sudo nano ejemplo.com
  1. En el archivo de configuración de NGINX, configura el servidor para que escuche en el puerto 80, utilizando la directiva proxy_pass para reenviar las peticiones proxy a tu servidor back-end:
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://your_backend_server_ip;
        proxy_set_header Host $host; # Forwarded host
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect off;
    }

Sustituye tu_ip_servidor_backend por la dirección IP real de tu servidor back-end.

Ajustar el equilibrio de carga

Para configurar un equilibrador de carga, define un bloque ascendente y utiliza proxy_pass dentro de tu bloque de servidor para distribuir el tráfico entre varios servidores:

upstream myapp1 {
    server backend1.example.com;
    server backend2.example.com;
}
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://myapp1;
        proxy_next_upstream error timeout;
        # Additional settings...
    }

Manejar contenido estático

Para mayor eficacia, sirve contenido estático directamente desde NGINX utilizando un bloque de ubicación independiente:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://your_backend_server_ip;
        # Proxy settings...
    }
    location /static/ {
        root /path/to/static/files;
        expires 30d;
    }

Ajuste fino de las directivas proxy

Personaliza la forma en que NGINX interactúa con tus servidores proxy utilizando varias directivas proxy_ para mejorar el rendimiento y gestionar eficazmente las peticiones proxy:

  • proxy_pass: especifica el protocolo y la dirección del servidor proxy. Éste es el uso básico para reenviar peticiones basándose en la URI de la petición:
location / {
    proxy_pass http://backend.example.com;
}
  • proxy_set_header: modifica o añade cabeceras a la petición enviada desde el servidor de origen, asegurándose de que recibe toda la información necesaria sobre la petición original:
location / {
    proxy_pass http://backend.example.com;
    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;
}
  • proxy_cache: activa el almacenamiento en caché de las respuestas del servidor proxy. Configúralo junto con proxy_cache_path para definir los parámetros de la caché:
http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
    server {
        location / {
            proxy_pass http://backend.example.com;
            proxy_cache my_cache;
        }
    }
  • proxy_buffering: controla el almacenamiento en búfer de la respuesta: desactivarlo puede reducir la latencia en casos de uso específicos:
location / {
    proxy_pass http://backend.example.com;
    proxy_buffering off;
}
  • proxy_ssl: garantiza conexiones seguras al servidor proxy con encriptación SSL:
location / {
    proxy_pass https://backend.example.com;
    proxy_set_header X-Forwarded-Proto https;
}
  • proxy_buffer_size: especifica el tamaño del búfer para la primera parte de la respuesta:
location / {
    proxy_pass http://backend.example.com;
    proxy_buffer_size 4k;
}
  • Proxy timeouts: establece los tiempos de espera para el establecimiento de la conexión, la lectura y el envío de datos al servidor proxy, respectivamente:
location / {
    proxy_pass http://backend.example.com;
    proxy_connect_timeout 60s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;
}

4. Prueba el proxy inverso NGINX

Una vez terminada la configuración de tu proxy inverso NGINX, es hora de activar la configuración, comprobar si hay errores de sintaxis y aplicar los cambios. Estos son los pasos:

  1. Crea un enlace simbólico desde tu archivo de configuración en sitios-disponibles a sitios-habilitados para activarlo:
sudo ln -s /etc/nginx/sites-available/ejemplo.com /etc/nginx/sites-enabled/
  1. Prueba NGINX para evitar la interrupción del servicio por posibles errores de configuración:
sudo nginx -t

Si se detecta algún problema con el proxy inverso NGINX, te indicará dónde está, permitiéndote solucionar y corregir los errores.

Recargar o reiniciar NGINX

Para aplicar tus cambios de configuración, puedes recargar o reiniciar el servidor NGINX.

  • Recargar NGINX: preferido generalmente ya que aplica los cambios sin eliminar las conexiones existentes:
sudo systemctl reload nginx
  • Reiniciar NGINX: si es necesario, puedes reiniciar completamente NGINX, aunque esto interrumpirá brevemente el servicio:
sudo systemctl restart nginx

A veces es necesario reiniciar para realizar cambios más significativos o para solucionar errores de NGINX.

Conclusión

En esta guía, has aprendido a configurar NGINX como servidor proxy inverso, abarcando la instalación, la configuración y las pruebas.

Gestionando y distribuyendo uniformemente las peticiones entrantes, te aseguras de que tu servidor se utiliza de forma óptima, y tus aplicaciones web funcionan sin problemas. 

Utiliza estos pasos como punto de partida para mejorar el rendimiento, la seguridad y la escalabilidad de tu entorno de servidor con NGINX.

Esperamos que esta guía te haya sido de utilidad. Si tienes algún comentario o pregunta, escríbela en la sección de abajo. ¡Buena suerte!

Proxy inverso NGINX – Preguntas frecuentes

Esta sección responderá a las preguntas más comunes sobre los servidores proxy inversos NGINX.

¿Cuáles son las ventajas de utilizar un proxy inverso NGINX?

Utilizar un servidor NGINX proxy inverso puede mejorar el rendimiento equilibrando el tráfico entre varios servidores web.

También mejora la seguridad y la escalabilidad en los centros de datos, por lo que es ideal para gestionar aplicaciones web.

¿Puedo utilizar NGINX como proxy inverso para varios servidores back-end?

Sí, puedes utilizar NGINX como proxy inverso para múltiples back-ends, incluso los que emplean tecnologías diferentes como Apache Tomcat. 

Esta configuración mejora la asignación de recursos y aumenta el rendimiento de otros servidores.

¿Qué consideraciones de seguridad debo tener en cuenta al configurar un proxy inverso con NGINX?

Cuando configures un proxy inverso NGINX, utiliza SSL para asegurar la transmisión de datos. Dado su papel como punto único de entrada, es crucial aplicar medidas de seguridad sólidas. 

Asegúrate también de configurar correctamente los WebSockets para mantener una comunicación segura y en tiempo real.

¿Puedo almacenar contenido en caché con un proxy inverso NGINX?

Sí, el uso de la caché del proxy inverso NGINX puede reducir los tiempos de carga y la demanda del servidor almacenando copias de los recursos a los que se accede con frecuencia. 

Esto es especialmente útil para microservicios y hosts virtuales, ya que agiliza la entrega de contenidos y mejora la experiencia del usuario.

Author
El autor

Diego Vargas

Diego es comunicador social, especialista en publicidad digital que trabaja constantemente en mejorar sus conocimientos de marketing digital, enfocándose en contenido y SEO. Idiomas, series, libros y cursos en internet son sus hobbies principales, además de los deportes. Este es su perfil de LinkedIn.