En este tema, aprenderemos cómo configurar NGINX como un proxy inverso. Un proxy inverso es un servidor que se sitúa entre los clientes y los servidores backend, redirigiendo las solicitudes de los clientes a los servidores backend adecuados. Esta configuración es útil para mejorar la seguridad, el rendimiento y la escalabilidad de las aplicaciones web.
Conceptos Clave
- Proxy Inverso: Un servidor que redirige las solicitudes de los clientes a uno o más servidores backend.
- Servidor Backend: El servidor que realmente maneja las solicitudes y responde al cliente.
- Balanceo de Carga: Distribuir las solicitudes entre varios servidores backend para mejorar el rendimiento y la disponibilidad.
Configuración Básica de un Proxy Inverso
Paso 1: Instalación de NGINX
Si aún no tienes NGINX instalado, sigue las instrucciones del módulo anterior para instalarlo.
Paso 2: Configuración del Archivo nginx.conf
-
Abre el archivo de configuración principal de NGINX (
nginx.conf
), que generalmente se encuentra en/etc/nginx/nginx.conf
. -
Dentro del bloque
http
, define un bloqueserver
para configurar el proxy inverso.
http { server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; 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; } } }
Explicación del Código
listen 80;
: NGINX escuchará en el puerto 80 (HTTP).server_name example.com;
: Define el nombre del servidor.location / { ... }
: Configura la ruta raíz para redirigir todas las solicitudes entrantes.proxy_pass http://backend_server;
: Redirige las solicitudes al servidor backend. Reemplazabackend_server
con la dirección IP o el nombre de dominio de tu servidor backend.proxy_set_header
: Estas directivas configuran los encabezados HTTP que se enviarán al servidor backend.
Paso 3: Definir el Servidor Backend
Puedes definir el servidor backend directamente en la directiva proxy_pass
o usar un bloque upstream
para definir múltiples servidores backend.
Usando un Bloque upstream
http { upstream backend_servers { server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; 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; } } }
Explicación del Código
upstream backend_servers { ... }
: Define un grupo de servidores backend.server backend1.example.com;
: Define un servidor backend.proxy_pass http://backend_servers;
: Redirige las solicitudes al grupo de servidores backend.
Paso 4: Probar la Configuración
- Verifica la configuración de NGINX para asegurarte de que no haya errores de sintaxis:
- Si la verificación es exitosa, recarga NGINX para aplicar los cambios:
Ejercicio Práctico
Objetivo: Configurar NGINX como un proxy inverso para dos servidores backend.
- Abre el archivo
nginx.conf
. - Define un bloque
upstream
con dos servidores backend. - Configura un bloque
server
para redirigir las solicitudes al grupo de servidores backend. - Verifica y recarga la configuración de NGINX.
Solución:
http { upstream backend_servers { server backend1.example.com; server backend2.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; 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; } } }
Errores Comunes y Consejos
- Error 502 Bad Gateway: Esto puede ocurrir si NGINX no puede comunicarse con el servidor backend. Verifica que los servidores backend estén en funcionamiento y que las direcciones IP o nombres de dominio sean correctos.
- Configuración Incorrecta de Encabezados: Asegúrate de configurar correctamente los encabezados HTTP para que el servidor backend reciba la información correcta del cliente.
Conclusión
En esta sección, hemos aprendido cómo configurar NGINX como un proxy inverso. Esta configuración es fundamental para mejorar la seguridad, el rendimiento y la escalabilidad de las aplicaciones web. En el próximo tema, exploraremos cómo implementar el balanceo de carga con NGINX.
Curso de NGINX
Módulo 1: Introducción a NGINX
Módulo 2: NGINX como Servidor Web
- Sirviendo Contenido Estático
- Listados de Directorios
- Páginas de Error Personalizadas
- Registro y Formatos de Registro
Módulo 3: NGINX como Proxy Inverso
- Introducción al Proxy Inverso
- Configurando un Proxy Inverso
- Balanceo de Carga
- Verificaciones de Salud