BLOG | NGINX

Présentation des modules dynamiques dans NGINX 1.9.11

NGINX-Partie-de-F5-horiz-black-type-RGB
Andrew Hutchings Miniature
Andrew Hutchings
Publié le 09 février 2016


Aujourd'hui, nous avons publié la version open source NGINX 1.9.11 , avec une nouvelle fonctionnalité qui, selon nous, aura un impact énorme sur la façon dont vous utilisez NGINX et NGINX Plus : les modules dynamiques . Avec les modules dynamiques, vous pouvez éventuellement charger des fichiers d’objets partagés distincts lors de l’exécution en tant que modules, à la fois des modules tiers et certains modules NGINX natifs. La nouvelle implémentation maintient autant que possible la compatibilité descendante avec l'API du module.

Éditeur – Dans NGINX 1.11.5 et versions ultérieures (et NGINX Plus R11 et versions ultérieures), vous pouvez compiler des modules dynamiques sans compiler également le binaire NGINX complet. Pour obtenir des instructions, consultez Compilation de modules dynamiques pour NGINX Plus .

La prochaine version de NGINX Plus (NGINX Plus R9) s'appuiera sur cette fonctionnalité de modules dynamiques. Nous prévoyons d’établir un référentiel de modules NGINX gérés avec une gamme de modules tiers que nous avons testés et certifiés par rapport à NGINX Plus, ce qui vous permettra d’ajouter plus facilement des extensions courantes à NGINX Plus en toute confiance. Si vous souhaitez que vos modules open source ou commerciaux soient inclus dans notre référentiel, veuillez nous contacter via le lien Contacter le service commercial .

Jusqu'à présent, si vous vouliez créer un module pour NGINX, vous deviez le compiler dans un binaire NGINX avec le code source NGINX. Le module a été chargé avec NGINX à chaque fois, que vous le vouliez ou non. Pour les empaqueteurs de distributions de systèmes d'exploitation, cela rendait très difficile la création de binaires NGINX personnalisés pour chaque utilisateur.

Les modules statiques sont compilés dans l'exécutable NGINX pour activer les modules dynamiques avec NGINX
Les modules statiques sont compilés dans l'exécutable NGINX

Dans la première version des modules dynamiques, vous devez toujours compiler les modules NGINX facultatifs en même temps que le binaire NGINX, mais vous créez également un objet partagé distinct pour chaque module chargé dynamiquement et utilisez une directive dans le fichier de configuration NGINX pour activer et désactiver le chargement de l'objet partagé au moment de l'exécution.

Les modules dynamiques NGINX sont compilés dans un objet partagé de module binaire distinct
Les modules dynamiques sont compilés dans un objet partagé de module binaire distinct

Chargement dynamique des modules NGINX

Dans la première version, les modules et ensembles de modules NGINX suivants peuvent être créés de manière dynamique :

Pour générer les objets partagés chargeables dynamiquement, ajoutez =dynamic à l' argument standard du module --with_ :

# ./configure --with-http_geoip_module=dynamique --with-http_image_filter_module=dynamique --with-mail=dynamique --with-stream=dynamique --with-http_xslt_module=dynamique

Lorsque vous installez le code source de NGINX 1.9.11, il existe un nouveau sous-répertoire appelé modules et le processus de construction y place les objets binaires partagés. Par défaut, le chemin est /usr/local/nginx/modules .

Pour charger un module lors de l'exécution, incluez la nouvelle directive load_module dans le contexte principal, en spécifiant le chemin d'accès au fichier objet partagé pour le module, placé entre guillemets. Lorsque vous rechargez la configuration ou redémarrez NGINX, le module dynamique est chargé. Vous pouvez spécifier un chemin relatif au répertoire source, comme dans ces exemples, ou un chemin complet.

load_module "modules/ngx_http_geoip_module.so";load_module "modules/ngx_stream_module.so";

Pour « décharger » dynamiquement un module, commentez ou supprimez sa directive load_module et rechargez la configuration NGINX. Si d'autres directives dans le fichier concernent le module que vous déchargez, n'oubliez pas de les commenter ou de les supprimer également.

Conversion de modules tiers

Pour les développeurs de nombreux modules traditionnels tiers, la conversion au chargement dynamique nécessite très peu de travail. Dans de nombreux cas, vous n'avez besoin de modifier que le fichier de configuration du code source de votre module. D'autres modules nécessiteront un peu plus de travail. Le wiki NGINX comprend un guide de conversion de module et des informations détaillées sur le format du fichier de configuration source du module .

Pour compiler un module tiers qui a été converti, utilisez le nouvel argument --add-dynamic-module et spécifiez le chemin :

# ./configure --add-dynamic-module= /chemin/vers/la/source/du/module

Comme avec les modules NGINX, un objet partagé est créé et installé dans le sous-répertoire modules , et vous ajoutez une directive load_module pour celui-ci à la configuration NGINX. Notre équipe de relations avec les développeurs est disponible pour vous aider à convertir un module. Contactez-nous via la liste de diffusion de développement NGINX .

L'avenir des modules dynamiques

Dans les versions futures, nous prévoyons d'ajouter la possibilité de compiler des modules après la compilation du binaire NGINX. Nous sommes également en train de documenter l'API du module et cette documentation sera disponible gratuitement sur le wiki NGINX une fois terminée.

Pour tester vous-même les modules dynamiques, téléchargez NGINX 1.9.11 .

Pour essayer NGINX Plus, 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."