ndk: Nginx Development Kit
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-ndk
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-ndk
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ndk_http_module.so;
Este documento describe nginx-module-ndk v0.3.4 lanzado el 20 de febrero de 2025.
El NDK es un módulo de Nginx diseñado para extender la funcionalidad central del excelente servidor web Nginx de una manera que puede ser utilizada como base para otros módulos de Nginx.
Tiene funciones y macros para tratar tareas genéricas que actualmente no tienen código genérico como parte de la distribución central. El NDK en sí añade pocas características que son vistas desde el punto de vista del usuario; está diseñado simplemente para ayudar a reducir el código que los desarrolladores de módulos de Nginx necesitan escribir.
Los desarrolladores de módulos de Nginx que deseen utilizar cualquiera de las características del NDK deben especificar que el NDK es una dependencia de su módulo, y que los usuarios necesitarán compilarlo también cuando compilen sus propios módulos. También necesitarán declarar en sus propios módulos qué características del NDK desean utilizar (explicado a continuación).
Si no eres un desarrollador de módulos de Nginx, entonces la única parte útil de este proyecto será la sección 'uso para usuarios' a continuación.
Características
- funciones conf_set adicionales para expresiones regulares, valores complejos/script, rutas...
- macros para simplificar tareas como comprobar valores NULL al hacer ngx_array_push
- parches al código fuente principal
- se incluye el manejador de biblioteca externa genérico ngx_auto_lib_core (ver readme separado)
Diseño
modular
El kit en sí está diseñado de manera modular, de modo que solo se compila el código requerido. Es posible añadir solo un único módulo NDK, algunos o todos ellos.
auto-generado y fácilmente extensible
Muchas de las macros disponibles en el NDK son auto-generadas a partir de archivos de configuración simples. Esto hace que crear macros similares para tu propio código sea muy simple; generalmente solo es cuestión de añadir una línea extra a un archivo de configuración y volver a ejecutar el script de construcción.
Uso para usuarios
Si otro módulo de Nginx que deseas usar especifica que el NDK es una dependencia, necesitarás hacer lo siguiente:
- descargar el código fuente (https://github.com/simpl/ngx_devel_kit)
- descomprimir el código fuente (tar -xzf $name)
- compilar Nginx con la siguiente opción extra
--add-module=/path/to/ngx_devel_kit.
por ejemplo:
./configure --add-module=/path/to/ngx_devel_kit \
--add-module=/path/to/another/module
Uso para desarrolladores
Para usar el NDK en tu propio módulo, necesitas añadir lo siguiente:
- añade esta línea a tu módulo
#include <ndk.h>
Nota: dado que el NDK incluye las siguientes líneas
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
puedes reemplazarlas con la única inclusión anterior. 2. añade la siguiente línea en el archivo de configuración de tu módulo:
have=NDK_[module_name] . auto/have
para cada módulo NDK que desees usar (necesitas incluir auto/have múltiples veces si deseas usar múltiples módulos NDK).
Nota: el antiguo método de establecer
CFLAGS="$CFLAGS -DNDK_[module_name]"
ahora está obsoleto. Aún funcionará, pero resultará en líneas innecesarias mostradas al compilar Nginx.
Advertencia: Usando NDK_ALL
También puedes establecer NDK_ALL para incluir todos los módulos NDK. Esto es principalmente por conveniencia en las primeras etapas de desarrollo de otro módulo. Sin embargo,
NO DEJES NDK_ALL EN TU ARCHIVO DE CONFIGURACIÓN CUANDO PUBLIQUES
Aunque el NDK es bastante pequeño ahora, podría con el tiempo convertirse en un gran repositorio de código que, si se usa NDK_ALL, resultaría en considerablemente más código compilado del que es necesario.
Módulos que usan NDK
Los siguientes módulos de terceros hacen uso del NDK.
- ngx_http_lua_module
- ngx_http_set_misc_module
- ngx_http_encrypted_session_module
- ngx_http_form_input_module
- ngx_http_iconv_module
- ngx_http_array_var_module
Si deseas añadir tu módulo a esta lista, háznoslo saber.
Agradecimientos especiales
Un agradecimiento especial a Yichun Zhang por ayudar a mantener este módulo.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-ndk.