Revista Informática

Cómo configurar NGINX para redirigir a una aplicación específica

Publicado el 23 octubre 2024 por Daniel Rodríguez @analyticslane
Cómo configurar NGINX para redirigir a una aplicación específica

Un caso de uso de NGINX es como proxy inverso, redirigiendo las solicitudes de clientes a servidores backend y proteger los servicios. Permitiendo integrar varias aplicaciones en un mismo servidor. En los escenarios en los que existen varias aplicaciones en los servidores backend, puede surgir la necesidad de redirigir automáticamente a una aplicación predeterminada cuando el usuario accede a una ruta específica, como puede ser la raíz del dominio, sin afectar el acceso a las demás rutas. Simplificando de este modo la navegación de los usuarios. En esta entrada, se explicará cómo configurar NGINX para redirigir a una aplicación específica cuando los usuarios accedan a la raíz (/), manteniendo la funcionalidad de proxy inverso para el resto de las rutas.

El problema a solucionar

Lo que se va a solucionar en esta entrada es un problema que surge cuando se tiene un servidor con varias aplicaciones bajo diferentes rutas, por ejemplo:

Estas aplicaciones pueden estar alojadas en un servidor backend y configuradas para pasar a través de un proxy inverso en NGINX. Lo que se desea conseguir es:

Ahora, la meta es:

  • Redirigir automáticamente a /app1 cuando un usuario acceda a la raíz del sitio web (/).
  • Mantener el proxy inverso para todas las demás rutas, de modo que el acceso a /app2, /app3, etc., funcione sin problemas.

El desafío es evitar conflictos en la configuración de NGINX y dejar esta flexible para que el resto de las rutas no se vean afectadas. Incluso, si se instala una aplicación nueva en el backend esta se muestre sin problemas.

Configurar NGINX para redirigir a una aplicación específica

Para lograr este comportamiento en NGINX, es necesario una configuración que distinga entre el acceso a la raíz (/) y el resto de las rutas. Aquí está la solución paso a paso:

  1. Configura la redirección solo para la raíz (/): Lo que se consigue mediante un bloque location = / para redirigir únicamente el acceso a la raíz hacia /app1. El símbolo = hace que esta regla solo afecte a esta ruta.
  2. Mantener el proxy inverso para otras rutas: Para lo que se emplea un bloque location / que capture cualquier otra ruta y pase las solicitudes al backend correspondiente.

Configuración paso a paso

A continuación, se muestra una posible configuración completa que se puede utilizar como plantilla para implementar esta solución en un servidor NGINX:

server {
    listen 80;
    server_name tu_dominio.com;

    # Redirigir exactamente la raíz '/' a '/app1'
    location = / {
        return 301 /app1;
    }

    # Proxy para todo lo demás (cualquier ruta que no sea exactamente '/')
    location / {
        proxy_pass http://10.0.0.15:8080;
        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;
    }
}

En donde:

  • listen 80: NGINX escuchará en el puerto 80 (HTTP) para este servidor.
  • server_name tu_dominio.com: Este es el dominio que NGINX gestionará.
  • location = /: Este bloque indica que solo redirigirá si el cliente accede exactamente a la raíz (/). El return 301 /app1 envía una redirección permanente (código 301) a la aplicación en /app1.
  • location /: Este segundo bloque captura cualquier otra ruta que no sea exactamente la raíz (/). Actúa como proxy inverso, pasando las solicitudes al backend en http://10.0.0.15:8080. Aquí, NGINX envía las cabeceras adecuadas para mantener información del cliente, como la dirección IP original.

Verificación y recarga de NGINX

Una vez actualizado el archivo de configuración, será necesario verificar la configuración y reiniciar el servidor:

    Verificar que la configuración esté correcta: Después de aplicar los cambios, es recomendable verificar que la sintaxis de la configuración sea válida. Para lo que se puede ejecutar el siguiente comando:
sudo nginx -t
    Reiniciar NGINX para aplicar los cambios: Si todo está en orden, será necesario reiniciar NGINX para que los cambios surtan efecto:
sudo systemctl reload nginx

Conclusiones

En esta entrada se ha visto como configurar NGINX para redirigir a una aplicación específica. Pudiendo mantener el resto del servidor proxy sin cambios. Todo ello mediante el uso de bloques location = / y location /. Especialmente el comando el uso location = / que indica a NGINX que a la regla solamente se debe aplicar cuando la ruta sea exacta, manteniendo una configuración clara y sin conflictos para futuras extensiones o aplicaciones adicionales.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.


Volver a la Portada de Logo Paperblog