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

  1. Proxy Inverso: Un servidor que redirige las solicitudes de los clientes a uno o más servidores backend.
  2. Servidor Backend: El servidor que realmente maneja las solicitudes y responde al cliente.
  3. 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

  1. Abre el archivo de configuración principal de NGINX (nginx.conf), que generalmente se encuentra en /etc/nginx/nginx.conf.

  2. Dentro del bloque http, define un bloque server 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. Reemplaza backend_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

  1. Verifica la configuración de NGINX para asegurarte de que no haya errores de sintaxis:
sudo nginx -t
  1. Si la verificación es exitosa, recarga NGINX para aplicar los cambios:
sudo systemctl reload nginx

Ejercicio Práctico

Objetivo: Configurar NGINX como un proxy inverso para dos servidores backend.

  1. Abre el archivo nginx.conf.
  2. Define un bloque upstream con dos servidores backend.
  3. Configura un bloque server para redirigir las solicitudes al grupo de servidores backend.
  4. 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.

© Copyright 2024. Todos los derechos reservados