Il s'agit d'un article de blog invité de Nitish Tiwari, développeur de logiciels pour Minio , un serveur de stockage d'objets distribué spécialisé dans les applications cloud et l'approche DevOps pour le développement et la livraison d'applications. Les intérêts de Nitish comprennent les infrastructures logicielles, en particulier le stockage et les systèmes distribués.
Dans cet article, Nitish explique comment utiliser NGINX et NGINX Plus comme proxy inverse et équilibreur de charge pour les serveurs Minio. Cet article s'applique également à NGINX et NGINX Plus ; par souci de concision, il fait uniquement référence à NGINX Plus.
Presque toutes les applications ont besoin de stockage, mais différentes applications ont besoin du stockage et l'utilisent de manière particulière. Prenons par exemple un magasin de documents : il n'a peut-être pas besoin de répondre à des demandes de lecture fréquentes lorsqu'il est petit, mais il doit évoluer au fil du temps. Une autre application, comme une galerie d’images, doit à la fois répondre rapidement aux demandes et évoluer dans le temps.
Ces nuances rendent la configuration du stockage difficile. Cependant, tout n’est pas sombre : avec l’avènement du stockage d’objets comme moyen par défaut de stocker des données non structurées, HTTP est devenu le mode de communication par défaut, standardisant la façon dont les applications communiquent avec le stockage.
Mais la question demeure : Comment créer une configuration de stockage d’objets adaptée aux besoins de votre application, mais toujours flexible ?
Étant donné que le stockage d’objets implique des serveurs et des clients HTTP, il est logique de disposer d’un serveur Web polyvalent comme NGINX Plus pour gérer le trafic HTTP. Un serveur de stockage d’objets léger tel que Minio peut être utilisé pour fournir un stockage évolutif au niveau du backend. La flexibilité d’un tel système est la clé pour créer un service de niveau entreprise.
Avec NGINX Plus, les administrateurs peuvent non seulement équilibrer la charge du trafic entrant, mais ils peuvent également mettre en cache, limiter, mettre fin à SSL/TLS et même filtrer le trafic en fonction de divers paramètres. Minio, quant à lui, propose un serveur de stockage d'objets léger compatible avec Amazon S3 .
MinIO est conçu pour le stockage de l'IA et est particulièrement adapté au stockage de données non structurées telles que des photos, des vidéos, des fichiers journaux, des sauvegardes et des images de machines virtuelles et de conteneurs. Le serveur Minio est suffisamment léger pour être fourni avec la pile application , similaire à Node.js, Redis et MySQL. Minio prend également en charge un mode distribué , vous permettant de regrouper plusieurs lecteurs, même sur différentes machines, dans un seul serveur de stockage d'objets.
Dans cet article, nous explorerons certaines des fonctionnalités de NGINX Plus dans divers cas d’utilisation et apprendrons à les combiner avec Minio pour configurer un système de stockage d’objets de qualité professionnelle, hautement évolutif, hautement disponible et stable.
NGINX Plus est bien connu comme serveur proxy inverse. Mais pourquoi a-t-on besoin d’un proxy inverse pour Minio ? Examinons quelques cas d’utilisation :
miroir
Minio Client ( mc
).NGINX Plus reverse proxys le trafic client en transmettant les requêtes à un serveur backend, qui écoute l'URL spécifiée par la directive proxy_pass
. Dans l'extrait de configuration suivant, une instance Minio autonome s'exécute sur localhost
, elle est donc disponible sur http://localhost:9000 . Toutes les requêtes arrivant sur le port 80 vers le répertoire de niveau supérieur ( / ) sur www.example.com sont transmises à Minio. NGINX Plus définit explicitement l'en-tête Host
sur sa valeur dans la demande d'origine.
serveur { écouter 80 ;
nom_serveur www.exemple.com ;
emplacement / {
proxy_set_header Hôte $http_host ;
proxy_pass http://localhost:9000 ;
}
}
Si vous disposez de plusieurs serveurs Minio, équilibrez la charge du trafic entre eux en les répertoriant dans un bloc de configuration en amont
et en référençant le groupe en amont dans la directive proxy_pass
:
minio_servers en amont { serveur minio-serveur-1 :9000; serveur minio-serveur-2 :9000; } serveur { écoute 80; nom_serveur www.exemple.com; emplacement / { proxy_set_header Hôte $http_host; proxy_pass http:// minio_servers ; } }
Pour plus de détails sur la configuration de NGINX ou NGINX Plus comme proxy pour Minio, consultez la documentation Minio .
HTTPS devenant désormais le protocole par défaut pour une grande partie du trafic Web, il est logique de déployer un serveur HTTPS, plutôt qu'un simple serveur HTTP, pour Minio. Il est assez simple de configurer NGINX Plus en tant que serveur HTTPS. Vous avez besoin d'un certificat SSL/TLS pour commencer ; Let's Encrypt fournit des certificats SSL/TLS gratuits et s'intègre à NGINX Plus .
L’étape suivante consiste à modifier le fichier de configuration NGINX Plus. Ici, vous devez spécifier le paramètre ssl
de la directive listen
dans le bloc serveur
, puis spécifier les fichiers contenant le certificat du serveur et la clé privée :
serveur { écouter 80; nom_serveur www.exemple.com; retourner 301 https://www.exemple.com$request_uri; } serveur { écouter 443 ssl ; nom_serveur www.exemple.com; certificat_ssl www.exemple.com.crt; clé_certificat_ssl www.exemple.com.key ; protocoles_ssl TLSv1 TLSv1.1 TLSv1.2; chiffrements_ssl HIGH:!aNULL:!MD5; emplacement / { proxy_set_header Hôte $http_host; proxy_pass http://localhost:9000; } }
Pour plus d'informations sur la terminaison SSL/TLS, consultez le Guide d'administration NGINX Plus .
Les serveurs de stockage d’objets ne sont pas connus pour leur vitesse, mais cela ne signifie pas nécessairement des réponses lentes aux clients. Lorsque vous activez la mise en cache sur le serveur NGINX Plus, il enregistre les données fréquemment consultées qu'il peut renvoyer immédiatement au client sans avoir à transmettre la demande au serveur principal.
Voici comment cela fonctionne. Le cache Web NGINX Plus se trouve entre un client et Minio, enregistrant une copie de chaque fichier de contenu demandé. Lorsqu'un client demande du contenu stocké dans le cache, NGINX Plus le renvoie directement, sans contacter Minio. Cela améliore à la fois le temps de réponse du client et réduit la charge sur le serveur Minio.
Vous configurez le cache NGINX Plus pour Minio avec les directives proxy_cache_path
et proxy_cache
. La directive proxy_cache_path
définit l'emplacement et la configuration du cache, et la directive proxy_cache
l'active. Pour plus de détails, consultez Guide de mise en cache avec NGINX et NGINX Plus .
proxy_cache_path /chemin/vers/cache niveaux=1:2 clés_zone=mon_cache:10m taille_max=10g inactif=60m use_temp_path=désactivé ; serveur { # ... emplacement / { proxy_cache mon_cache ; proxy_set_header Hôte $http_host; proxy_pass http://localhost:9000; } }
Parfois, vous devez limiter les demandes pour des raisons commerciales ou de sécurité. Avec NGINX Plus, vous pouvez limiter la bande passante disponible, le nombre de requêtes ou le nombre de connexions.
Pour limiter la bande passante, utilisez la directive limit_rate
. Cet exemple limite la vitesse de téléchargement à 200 Ko par seconde :
serveur { # ... emplacement /images/ { limit_rate 200k ; # ... } }
Pour limiter les requêtes, utilisez les directives limit_req
et limit_req_zone
, comme dans cet exemple qui limite chaque adresse IP unique à 10 requêtes par seconde tout en autorisant des rafales de 20 requêtes.
limite_req_zone $binary_remote_addr zone=my_req_limit:10m débit=10r/s ; serveur { # ... emplacement /images/ { limite_req zone=my_req_limit burst=20 ; # ... } }
Pour limiter le nombre de connexions, utilisez les directives limit_conn
et limit_conn_zone
. Cet exemple limite chaque adresse IP unique à 5 connexions simultanées.
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m ; serveur { # ... emplacement /images/ { limit_conn my_conn_limit 5 ; # ... } }
Pour plus de détails, consultez le Guide d'administration NGINX Plus .
Dans cet article, nous avons démontré l’utilisation de plusieurs fonctionnalités de NGINX Plus pour l’équilibrage de charge, en particulier pour l’équilibrage de charge devant un serveur de stockage d’objets Minio. La combinaison de NGINX Plus et Minio vous permet de configurer un serveur de stockage d'objets flexible adapté aux besoins de votre application.
Pour en savoir plus sur l'équilibrage de charge avec NGINX Plus, consultez ces articles de blog et d'autres ressources :
Pour essayer NGINX Plus par vous-même, démarrez votre essai gratuit de 30 jours dès aujourd'hui ou contactez-nous pour discuter de vos cas d'utilisation .
« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."