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 aplicaciones 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 aplicaciones 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 aplicación, 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 aplicaciones 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 aplicación 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 aplicación , 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.
server { listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $http_host;
proxy_pass 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 { server minio-server-1:9000;
server minio-server-2:9000;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_set_header Host $http_host;
proxy_pass 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 :
server { listen 80;
server_name www.example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_set_header Host $http_host;
proxy_pass 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 /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
# ...
location / {
proxy_cache my_cache;
proxy_set_header Host $http_host;
proxy_pass 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:
server { # ...
location /images/ {
limit_rate 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.
limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s;
server {
# ...
location /images/ {
limit_req zone=my_req_limit burst=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.
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m;
server {
# ...
location /images/ {
limit_conn my_conn_limit 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 aplicación .
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.