Proxies NGINX: Servicio de múltiples puntos finales en una ubicación

Proxies NGINX: Servicio de múltiples puntos finales en una ubicación

10.06.2024
Autor: HostZealot Team
2 min.
75

Gestión de múltiples ubicaciones de proxies NGINX

Antes de sumergirse en todos los detalles acerca de la configuración y mucho más, vamos a empezar con las cosas básicas. Nginx es un servidor web bastante potente que puede aplicarse como proxy inverso, equilibrador de carga o proxy directo. Sólo para información general sobre este tema, vamos a discutir el principio del equilibrador de carga porque esta terminología puede ser realmente confusa. Así pues, este equilibrador reparte las peticiones entre un grupo de servidores y sólo después retransmite la respuesta del servidor al cliente.

Cuando hablamos de proxies inversos, estos son el tipo de aplicaciones que se encuentran entre los servidores internos y los clientes. Este tipo de servidor funciona aceptando el tráfico de los clientes y redirigiéndolo a la red interna. De esta forma, los usuarios no pueden acceder a los servidores internos directamente, sino que sólo lo hacen a través de un proxy inverso. Las principales ventajas del proxy inverso están relacionadas con la seguridad, la escalabilidad y un mejor cifrado SSL.  

Basándonos en nuestra experiencia práctica en este campo, explicaremos cómo configurar Nginx de forma que sirva a un par de endpoints con la misma ubicación. Para ello, utilizaremos la configuración del proxy inverso.

1. Configuración de Nginx

En los archivos de configuración de Nginx, se puede aclarar fácilmente de qué manera el servidor se ocupa de las solicitudes HTTP. El archivo de configuración principal se llama nginx.conf. Si hablamos específicamente de Ubuntu, entonces en este sistema operativo se puede encontrar en tal directorio como /etc/nginx. Las directivas pueden ser accesibles a través de este archivo y se pueden agrupar en bloques. 

1.1. La Directiva de bloqueo del servidor

Los bloques de servidor también pueden denominarse contextos. Definen totalmente el servidor virtual. Aquí, en la ilustración de abajo usamos listen para establecer IP/nombre de host y puerto:

server {
   listen 345.0.1.1:8080;
}

En este ejemplo, el servidor virtual está en la dirección 345.0.1.1 y los detalles del puerto son 8080.

1.2. La ubicación Bloque Directiva

En el bloque local se guarda información sobre cómo debe tratar el servidor las peticiones HTTP coincidentes. La ubicación se especifica con una expresión regular/cadena prefijo. Así que la URL de la petición HTTP encaja con el bloque local (específicamente con la cadena prefijo o expresión regular).

Para servir el contenido, podemos utilizar root como en el ejemplo siguiente:

server {
   listen 345.0.1.1:8080;
   location /books {
  root /info/categories;
   }
}

En el ejemplo anterior, los archivos se devuelven desde el directorio info/categories y añadiendo books a location, haremos coincidir las URLs con los books.

Otra alternativa puede ser alias. Esta directiva añade la URL solicitada a la ruta local directa, de tal forma que es posible omitir el prefijo de cadena:

location /books {
   alias /info/categories;
}

2. Gestión de múltiples puntos finales de proxy

Aquí vamos a tratar de explicar cómo funciona el proceso mediante la creación de 2 servidores virtuales y van a simular 2 puntos finales. Después de eso, vamos a explicar el proceso de configuración del servidor Nginx a las solicitudes de proxy con los puntos finales debajo de una URL.

2.1. Establecimiento de criterios de valoración

Empecemos por los 2 extremos más sencillos:

server {
   listen 8081;
   location /user1 {
  alias /info/user1;
   }
}
 
server {
   listen 8082;
   location /user2 {
  alias /info/user2;
   }
}

De esta manera, definimos 2 servidores virtuales, cada bloque incluye información como:

  • El primer servidor está en el puerto 8081, el contenido se sirve desde el directorio /info/user1 y las peticiones coinciden con /user1.
  • El segundo ejemplo está en el puerto 8082, el contenido se sirve desde el directorio /info/user2 y las peticiones coinciden con /user2.

2.2. La directiva proxy_pass

Para establecer un reenvío adecuado, debemos utilizar proxy-pass en el bloque local. Este tipo de directiva funciona enviando peticiones HTTP a una dirección específica. He aquí una ilustración de cómo debería ser:

 server {
   listen 8000;
   location /api {
  proxy_pass http://345.0.1.1:8081/user1;
   }
 
location /api/user2 {
   proxy_pass http://345.0.1.1:8082/user2;
}
}

En esta ilustración, se hizo un servidor virtual en el puerto 8000 y 2 ubicaciones en este servidor, estas ubicaciones funcionan de tal manera:

  • /api redirige las peticiones al endpoint inicial (http:// 345.0.1.1: 8081/user1)
  • /api/user2 redirige las peticiones al endpoint http:// 345.0.1.1: 8082/user2

Otro dato necesario es como proxy_pass redirecciona URLs. Aquí, vamos a compartir 2 casos tales como:

  • Proxy_pass conecta URL con el nombre de host, de tal forma http:// 345.0.1.1:8081
  • Proxy_pass conecta URL con la ruta, de tal forma http:// 345.0.1.1:8081/user1

2.3. Creación de datos de muestra

Antes de la prueba de la configuración, debe hacer que los archivos de prueba en /info/user2 y /info/user1 direcciones, esto se puede lograr de tal forma:

$ sudo echo { 'message' : 'Hi from user1' } | sudo tee /info/user1/echo.json
{ message : Hi from user1 }
$ sudo echo { 'message' : 'Hi from user2' } | sudo tee /info/user2/echo.json
{ message : Hi from user2 }

Una vez creados los datos de muestra, puede iniciar el proceso de prueba de la siguiente manera:

$ curl http://345.0.1.1:8000/api/echo.json
{ message : Hi from user1 }
$ curl http://345.0.1.1:8000/api/user2/echo.json
{ message : Hi from user2 }

Los archivos JSON se mostraron en la salida del proceso de prueba. Para concluir con el proceso, vamos a discutir todos los detalles de la solicitud inicial que son tales como:

  • La petición se reenvía desde http:// 345.0.1.1:8000/api/echo.json a http:// 345.0.1.1:8081/user1/echo.json
  • La petición http:// 345.0.1.1:8081/user1/echo.json se procesa y devuelve el recurso /info/user1/echo.json

En resumen

Basándonos en nuestra experiencia práctica en el campo de los servidores virtuales, decidimos compartir un par de recomendaciones útiles y ejemplos reales de cómo utilizar el servidor Nginx como proxy inverso. Mencionamos varios ejemplos prácticos de cómo 2 puntos finales pueden funcionar bajo una ruta de ubicación. Esperamos que este artículo fue útil para su caso y se puede utilizar fácilmente todo lo que necesita de la información anterior.

# VPS Compartir:
Artículos Relacionados