BLOG | NGINX

Introducción de módulos dinámicos en NGINX 1.9.11

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Andrew Hutchings
Andrew Hutchings
Publicado el 9 de febrero de 2016


Hoy lanzamos la versión 1.9.11 de NGINX de código abierto, con una nueva característica que creemos que tendrá un gran impacto en cómo utiliza NGINX y NGINX Plus : módulos dinámicos . Con módulos dinámicos, puede cargar opcionalmente archivos de objetos compartidos separados en tiempo de ejecución como módulos, tanto módulos de terceros como algunos módulos nativos de NGINX. La nueva implementación mantiene la compatibilidad con versiones anteriores de la API del módulo tanto como sea posible.

Editor: en NGINX 1.11.5 y posteriores (y NGINX Plus R11 y posteriores), puede compilar módulos dinámicos sin compilar también el binario NGINX completo. Para obtener instrucciones, consulte Compilación de módulos dinámicos para NGINX Plus .

La próxima versión de NGINX Plus (NGINX Plus R9) se basará en esta función de módulos dinámicos. Planeamos establecer un repositorio de módulos NGINX administrado con una variedad de módulos de terceros que hemos probado y certificado contra NGINX Plus, lo que le permitirá agregar extensiones comunes a NGINX Plus con mayor facilidad y confianza. Si desea que sus módulos comerciales o de código abierto se incluyan en nuestro repositorio, comuníquese con nosotros a través del enlace Contactar ventas .

Hasta ahora, si querías crear un módulo para NGINX tenías que compilarlo en un binario NGINX junto con el código fuente NGINX. El módulo se cargó con NGINX cada vez, lo quisieras o no. Para los empaquetadores de distribuciones de sistemas operativos, esto hizo que fuera muy difícil crear binarios NGINX personalizados para cada usuario.

Los módulos estáticos se compilan en el ejecutable NGINX para habilitar módulos dinámicos con NGINX
Los módulos estáticos se compilan en el ejecutable NGINX

En la primera versión de módulos dinámicos, todavía es necesario compilar los módulos NGINX opcionales al mismo tiempo que el binario NGINX, pero también se crea un objeto compartido separado para cada módulo cargado dinámicamente y se usa una directiva en el archivo de configuración NGINX para habilitar y deshabilitar la carga del objeto compartido en tiempo de ejecución.

Los módulos dinámicos de NGINX se compilan en un objeto compartido de módulo binario separado
Los módulos dinámicos se compilan en un objeto compartido de módulo binario separado

Carga dinámica de módulos NGINX

En la primera versión, los siguientes módulos y paquetes de módulos NGINX se pueden crear dinámicamente:

Para generar los objetos compartidos cargables dinámicamente, agregue =dynamic al argumento del módulo estándar --with_ :

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

Cuando instala el código fuente de NGINX 1.9.11, hay un nuevo subdirectorio llamado módulos , y el proceso de compilación coloca allí los objetos binarios compartidos. De forma predeterminada, la ruta es /usr/local/nginx/modules .

Para cargar un módulo en tiempo de ejecución, incluya la nueva directiva load_module en el contexto principal, especificando la ruta al archivo de objeto compartido para el módulo, entre comillas. Cuando recarga la configuración o reinicia NGINX, se carga el módulo dinámico. Puede especificar una ruta relativa al directorio de origen, como en estos ejemplos, o una ruta completa.

módulo_de_carga "módulos/ngx_http_geoip_module.so";módulo_de_carga "módulos/ngx_stream_module.so";

Para “descargar” dinámicamente un módulo, comente o elimine su directiva load_module y vuelva a cargar la configuración de NGINX. Si hay otras directivas en el archivo relacionadas con el módulo que estás descargando, recuerda comentarlas o eliminarlas también.

Conversión de módulos de terceros

Para los desarrolladores de muchos módulos tradicionales de terceros, la conversión a carga dinámica requiere muy poco trabajo. En muchos casos solo necesitas editar el archivo de configuración del código fuente de tu módulo. Otros módulos necesitarán un poco más de trabajo. El Wiki de NGINX incluye una Guía de conversión de módulos e información detallada sobre el formato del archivo de configuración de origen del módulo .

Para compilar un módulo de terceros que se ha convertido, utilice el nuevo argumento --add-dynamic-module y especifique la ruta:

# ./configure --add-dynamic-module= /ruta/al/módulo/fuente

Al igual que con los módulos NGINX, se crea e instala un objeto compartido en el subdirectorio de módulos , y se agrega una directiva load_module para él en la configuración de NGINX. Nuestro equipo de relaciones con desarrolladores está disponible para ayudar con la conversión de un módulo. Contáctenos a través de la lista de correo de desarrollo de NGINX .

El futuro de los módulos dinámicos

En futuras versiones, planeamos agregar la capacidad de compilar módulos después de que se haya compilado el binario NGINX. También estamos en el proceso de documentar la API del módulo y esta documentación estará disponible gratuitamente en NGINX Wiki cuando esté completa.

Para probar usted mismo los módulos dinámicos, descargue NGINX 1.9.11 .

Para probar NGINX Plus, 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.