Esta es una publicación de blog invitada de Nitish Tiwari, un desarrollador de software de Minio , un servidor de almacenamiento de objetos distribuidos especializado en aplicações en la nube y el enfoque DevOps para el desarrollo y la entrega de aplicaciones. Los intereses de Nitish incluyen infraestructura basada en software, especialmente sistemas de almacenamiento y distribuidos.
En esta publicación, Nitish explica cómo usar NGINX y NGINX Plus como proxy inverso y balanceador de carga para servidores Minio. La publicación se aplica igualmente a NGINX y NGINX Plus; para abreviar, se refiere solo a NGINX Plus.
Casi todas las aplicações necesitan almacenamiento, pero cada una necesita y utiliza el almacenamiento de maneras particulares. Tomemos como ejemplo un almacén de documentos: es posible que no necesite atender solicitudes de lectura frecuentes cuando es pequeño, pero necesita escalar a medida que pasa el tiempo. Otra aplicação, como una galería de imágenes, necesita satisfacer las solicitudes rápidamente y escalar con el tiempo.
Estos matices dificultan la configuración del almacenamiento. Sin embargo, no todo es sombrío: con la llegada del almacenamiento de objetos como forma predeterminada de almacenar datos no estructurados, HTTP se ha convertido en el modo de comunicación predeterminado, estandarizando la forma en que las aplicações se comunican con el almacenamiento.
Aún así, la pregunta sigue siendo: ¿Cómo construir una configuración de almacenamiento de objetos que se adapte a los requisitos de su aplicação y que sea flexible?
Debido a que el almacenamiento de objetos involucra servidores y clientes HTTP, tiene sentido tener un servidor web versátil como NGINX Plus al frente para manejar el tráfico HTTP. Se puede utilizar un servidor de almacenamiento de objetos liviano como Minio para proporcionar almacenamiento escalable en el backend. La flexibilidad de un sistema de este tipo es la clave para crear un servicio de nivel empresarial.
Con NGINX Plus, los administradores no solo pueden equilibrar la carga del tráfico entrante, sino que también pueden almacenar en caché, limitar, finalizar SSL/TLS e incluso filtrar el tráfico en función de varios parámetros. Minio, por otro lado, ofrece un servidor de almacenamiento de objetos liviano que es compatible con Amazon S3 .
MinIO está diseñado para el almacenamiento de IA y es más adecuado para almacenar datos no estructurados, como fotos, videos, archivos de registro, copias de seguridad e imágenes de máquinas virtuales y contenedores. El servidor Minio es lo suficientemente liviano como para integrarse con la pila de aplicação , similar a Node.js, Redis y MySQL. Minio también admite un modo distribuido , lo que le permite agrupar varias unidades, incluso en diferentes máquinas, en un único servidor de almacenamiento de objetos.
En esta publicación, exploraremos algunas de las características de NGINX Plus en varios casos de uso y aprenderemos cómo combinarlas con Minio para configurar un sistema de almacenamiento de objetos de nivel de producción, altamente escalable, altamente disponible y estable.
NGINX Plus es bien conocido como un servidor proxy inverso. Pero ¿por qué se necesita un proxy inverso para Minio? Veamos algunos de los casos de uso:
mirror
del Cliente Minio ( mc
).NGINX Plus actúa como proxy inverso del tráfico del cliente al pasar solicitudes a un servidor back-end, que escucha en la URL especificada por la directiva proxy_pass
. En el siguiente fragmento de configuración, una instancia independiente de Minio se ejecuta en localhost
, por lo que está disponible en http://localhost:9000 . Todas las solicitudes que llegan al puerto 80 al directorio de nivel superior ( / ) en www.example.com se pasan a Minio. NGINX Plus establece explícitamente el encabezado del Host
en su valor en la solicitud original.
servidor { escucha 80;
nombre_del_servidor www.ejemplo.com;
ubicación / {
encabezado_del_conjunto_proxy Host $http_host;
contraseña_del_proxy http://localhost:9000;
}
}
Si tiene varios servidores Minio, equilibre la carga del tráfico entre ellos incluyéndolos en un bloque de configuración ascendente
y haciendo referencia al grupo ascendente en la directiva proxy_pass
:
upstream minio_servers { servidor minio-server-1 :9000; servidor minio-server-2 :9000; } servidor { escuchar 80; nombre_servidor www.ejemplo.com; ubicación / { proxy_set_header Host $http_host; contraseña_proxy http:// minio_servers ; } }
Para obtener más detalles sobre cómo configurar NGINX o NGINX Plus como proxy para Minio, consulte la documentación de Minio .
Ahora que HTTPS se está convirtiendo en el protocolo predeterminado para gran parte del tráfico web, tiene sentido implementar un servidor HTTPS, en lugar de simplemente un servidor HTTP, para Minio. Es bastante fácil configurar NGINX Plus como un servidor HTTPS. Necesita un certificado SSL/TLS para comenzar; Let's Encrypt proporciona certificados SSL/TLS gratuitos y se integra con NGINX Plus .
El siguiente paso es editar el archivo de configuración de NGINX Plus. Aquí debe especificar el parámetro ssl
en la directiva listen
en el bloque del servidor
y luego especificar los archivos que contienen el certificado del servidor y la clave privada :
servidor { escuchar 80; nombre_servidor www.ejemplo.com; devolver 301 https://www.ejemplo.com$uri_solicitud; } servidor { escuchar 443 ssl ; nombre_servidor www.ejemplo.com; certificado_ssl www.ejemplo.com.crt; clave_certificado_ssl www.ejemplo.com.clave ; protocolos_ssl TLSv1 TLSv1.1 TLSv1.2; cifrados_ssl ALTO:!aNULL:!MD5; ubicación / { encabezado_conjunto_proxy Host $http_host; contraseña_proxy http://localhost:9000; } }
Para obtener más información sobre la terminación SSL/TLS, consulte la Guía de administración de NGINX Plus .
Los servidores de almacenamiento de objetos no son conocidos por su velocidad, pero eso no tiene por qué significar respuestas lentas a los clientes. Cuando habilita el almacenamiento en caché en el servidor NGINX Plus, este guarda los datos a los que se accede con frecuencia y puede devolverlos al cliente inmediatamente sin tener que reenviar la solicitud al servidor back-end.
Así es como funciona. El caché web NGINX Plus se encuentra entre un cliente y Minio, guardando una copia de cada archivo de contenido solicitado. Cuando un cliente solicita contenido almacenado en la caché, NGINX Plus lo devuelve directamente, sin contactar a Minio. Esto mejora el tiempo de respuesta al cliente y reduce la carga en el servidor Minio.
Configura el caché NGINX Plus para Minio con las directivas proxy_cache_path
y proxy_cache
. La directiva proxy_cache_path
establece la ubicación y la configuración del caché, y la directiva proxy_cache
lo activa. Para obtener más detalles, consulte Una guía para el almacenamiento en caché con NGINX y NGINX Plus .
proxy_cache_path /ruta/a/caché niveles=1:2 zona_de_claves=mi_caché:10m tamaño_máximo=10g inactivo=60m ruta_temperatorial_de_uso=desactivado ; servidor { # ... ubicación / { proxy_cache mi_caché ; proxy_set_header Host $http_host; contraseña_de_proxy http://localhost:9000; } }
A veces es necesario limitar las solicitudes por razones comerciales o de seguridad. Con NGINX Plus, puede limitar el ancho de banda disponible, la cantidad de solicitudes o la cantidad de conexiones.
Para limitar el ancho de banda, utilice la directiva limit_rate
. Este ejemplo limita la velocidad de descarga a 200 KB por segundo:
servidor { # ... ubicación /imágenes/ { tasa_límite 200k ; # ... } }
Para limitar las solicitudes, utilice las directivas limit_req
y limit_req_zone
, como en este ejemplo, que limita cada dirección IP única a 10 solicitudes por segundo y permite ráfagas de 20 solicitudes.
límite_de_solicitud $dirección_remota_binaria zona=mi_límite_de_solicitud:10m velocidad=10r/s ; servidor { # ... ubicación /imágenes/ { límite_de_solicitud zona=mi_límite_de_solicitud ráfaga=20 ; # ... } }
Para limitar el número de conexiones, utilice las directivas limit_conn
y limit_conn_zone
. Este ejemplo limita cada dirección IP única a 5 conexiones simultáneas.
límite_de_conexión $dirección_remota_binaria zona=mi_límite_de_conexión:10m ; servidor { # ... ubicación /imágenes/ { límite_de_conexión mi_límite_de_conexión 5 ; # ... } }
Para obtener más detalles, consulte la Guía de administración de NGINX Plus .
En esta publicación demostramos el uso de varias características de NGINX Plus para equilibrar la carga, en particular, para equilibrar la carga frente a un servidor de almacenamiento de objetos Minio. La combinación de NGINX Plus y Minio le permite configurar un servidor de almacenamiento de objetos flexible adaptado a los requisitos de su aplicação .
Para obtener más información sobre el equilibrio de carga con NGINX Plus, consulte estas publicaciones de blog y otros recursos:
Para probar NGINX Plus usted mismo, comience hoy su prueba gratuita de 30 días o contáctenos para analizar sus casos de uso .
"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.