Editor : La publicación del blog que anuncia el lanzamiento original del soporte para módulos dinámicos (en NGINX Open Source 1.9.11, febrero de 2016) redirige aquí. El proceso de compilación descrito en esa publicación está obsoleto.
Esta publicación es parte de una serie de dos partes sobre el uso de módulos dinámicos de terceros con NGINX Open Source y NGINX Plus.
NGINX Open Source 1.11.5 y NGINX Plus Release R11 introdujeron compatibilidad binaria para módulos dinámicos. Este artículo explica cómo compilar módulos de terceros para usar con NGINX Open Source y NGINX Plus en un entorno de desarrollo. Para obtener instrucciones sobre cómo crear, implementar y actualizar módulos dinámicos de terceros en un entorno de producción, consulte Creación de paquetes instalables para módulos dinámicos .
Por el bien de la brevedad, el resto de esta publicación se refiere únicamente a NGINX Plus, excepto cuando la diferencia entre este y NGINX Open Source sea relevante. Salvo que se indique lo contrario, todas las declaraciones sobre NGINX Plus también se aplican a NGINX Open Source.
Los módulos que se pueden cargar en NGINX Plus están escritos en C y cumplen con la API descrita en Extender NGINX en NGINX Wiki. Existe un gran ecosistema de módulos de terceros , que van desde intérpretes de idiomas hasta soluciones de seguridad, y algunos de ellos están incluidos y son compatibles con NGINX Plus.
Otros módulos de terceros, y módulos que usted mismo ha creado, deben compilarse de forma independiente y cargarse dinámicamente en NGINX Plus en tiempo de ejecución. Puede compilar estos módulos para usarlos con NGINX Plus al compilarlos contra NGINX Open Source como se ilustra en los dos ejemplos a continuación:
--with-compat
en el comando de configuración
Este ejemplo utiliza un módulo Hola Mundo simple para mostrar cómo actualizar la fuente de un módulo y cargarlo en NGINX Plus. El módulo “Hello World” implementa una directiva simple ( hello_world
) que responde a las solicitudes con un mensaje simple.
Determine la versión de código abierto de NGINX que corresponde a su instalación de NGINX Plus. En este ejemplo, es NGINX 1.11.5.
$ nginx -v versión de nginx: nginx/1.11.5 (nginx-plus-r11)
Descargue el paquete de código abierto NGINX correspondiente en nginx.org/download :
$ wget https://nginx.org/download/nginx-1.11.5.tar.gz $ tar -xzvf nginx-1.11.5.tar.gz
Obtenga la fuente del módulo NGINX 'Hello World' desde GitHub :
$ git clone https://github.com/perusio/nginx-hello-world-module.git
El archivo de configuración de shell de un módulo define cómo se construye, y su formato es diferente para los módulos dinámicos que para los módulos que se construyen estáticamente en un binario de código abierto NGINX.
Modifique el archivo nginx-hello-world-module/config para que contenga lo siguiente:
Nombre_complemento_ngx=módulo_ngx_http_hola_mundo
Si prueba -n "$enlace_módulo_ngx"; Entonces
Tipo_módulo_ngx=HTTP
Nombre_módulo_ngx=módulo_ngx_http_hola_mundo
Fuente_módulo_ngx="$dir_complemento_ngx/módulo_ngx_http_hola_mundo.c"
. auto/módulo
De lo contrario
MÓDULOS_HTTP="$MÓDULOS_HTTP módulo_ngx_http_hola_mundo"
SRCS_ADDON_NGX="$dir_complemento_ngx/módulo_ngx_http_hola_mundo.c"
fi
Para obtener información detallada sobre la compilación de módulos dinámicos, incluidas instrucciones sobre cómo actualizar el archivo de configuración de un módulo desde el formato anterior, consulte NGINX Wiki .
Compile el módulo ejecutando primero el script de configuración
con el argumento --with-compat
, que crea un entorno de compilación estándar compatible con NGINX Open Source y NGINX Plus. Luego ejecute make
modules
para construir el módulo:
$ cd nginx-1.11.5/ $ ./configure --with-compat --add-dynamic-module=../nginx-hello-world-module $ crear módulos
Copie la biblioteca de módulos (archivo .so ) a /etc/nginx/modules :
$ sudo cp objs/ngx_http_hello_world_module.so /etc/nginx/modules/
Para cargar el módulo en NGINX Plus, agregue la directiva load_module
en el contexto de nivel superior (principal) de su archivo de configuración nginx.conf (no dentro del contexto http
o de transmisión
):
módulo de carga módulos/ngx_http_hello_world_module.so;
En el contexto http
, agregue un bloque de ubicación
con la directiva hello_world
proporcionada por el módulo Hello World. Las solicitudes a la ubicación devuelven la respuesta hola
mundo
.
servidor {
escuchar 80;
ubicación / {
hola_mundo;
}
}
Recargue su configuración de NGINX Plus y pruébela con una solicitud simple:
$ nginx -s reload $ curl http://localhost/ hola mundo
NAXSI es un firewall de aplicação web (WAF) de alto rendimiento y fácil de usar que utiliza heurística y un sistema de puntuación para identificar solicitudes sospechosas, como ataques XSS e inyección SQL.
La fuente NAXSI se ha actualizado para cumplir con el nuevo formato del archivo de shell de configuración , por lo que crear un módulo dinámico para NGINX Plus es sencillo. El proceso se basa en las instrucciones de instalación de NAXSI :
$ git clone https://github.com/nbs-system/naxsi.git $ cd nginx-1.11.5/ $ ./configure --with-compat --add-dynamic-module=../naxsi/naxsi_src $ crear módulos $ sudo cp objs/ngx_http_naxsi_module.so /etc/nginx/modules
Cargue el módulo en el núcleo NGINX Plus agregando la directiva load_module
al contexto principal en su archivo nginx.conf :
módulo de carga módulos/ngx_http_naxsi_module.so;
La configuración de NAXSI se describe en detalle en la documentación del proyecto . La siguiente configuración de NGINX ilustra el módulo en acción:
# Edite esta directiva 'include' para que apunte a su archivo naxsi_core.rules
include /home/owen/src/naxsi/naxsi_config/naxsi_core.rules;
servidor {
listen 80;
ubicación / {
root /usr/share/nginx/html;
# Habilitar NAXSI
SecRulesEnabled;
# Definir adónde van las solicitudes bloqueadas
DeniedUrl "/50x.html";
# Reglas de verificación, que determinan cuándo NAXSI debe actuar
Regla de verificación "$SQL >= 8" BLOQUE;
Regla de verificación "$RFI >= 8" BLOQUE;
Regla de verificación "$TRAVERSAL >= 4" BLOQUE;
Regla de verificación "$EVADE >= 4" BLOQUE;
Regla de verificación "$XSS >= 8" BLOQUE;
# No olvides el registro de errores, donde se registran las solicitudes bloqueadas
error_log /tmp/naxsi.log;
}
error_page 500 502 503 504 /50x.html;
}
Puede verificar el correcto funcionamiento de NAXSI con un par de simples solicitudes HTTP:
curl
http://localhost/
devuelve la página de índice estándar de NGINX Plus almacenada en /usr/share/nginx/html .curl
"http://localhost/?a=<>"
activa la detección XSS de NAXSI y bloquea la solicitud, devolviendo la página de error estándar 50x.html de /usr/share/nginx/html . También registra un mensaje en error_log
.Para implementaciones de producción, también puede descargar versiones firmadas de NAXSI en https://github.com/nbs-system/naxsi/tags y compilarlas de manera similar.
Nota: La información de esta sección se aplica únicamente a NGINX Plus. El conjunto de módulos dinámicos que viene con los paquetes de código abierto NGINX prediseñados puede ser diferente de los que vienen con NGINX Plus. Los módulos dinámicos utilizados con NGINX Open Source reciben soporte de la misma manera que el código fuente de NGINX y los binarios prediseñados.
NGINX Plus viene con una serie de módulos dinámicos que también puedes descargar directamente desde nuestro repositorio de módulos. Para obtener una lista, consulte la página Módulos dinámicos . Estos módulos son de dos tipos:
Además, NGINX certifica módulos de proveedores comerciales que participan en nuestro programa de Módulos Certificados NGINX Plus . Estos módulos son distribuidos y soportados por sus proveedores. Para obtener una lista, filtre por autor Socio Certificado en la página Módulos dinámicos .
NGINX no prueba ni brinda soporte a los módulos que usted compila usted mismo (otros módulos de la comunidad, módulos proporcionados por proveedores externos que no son parte del programa de módulos certificados NGINX Plus y módulos personalizados). Si busca asistencia técnica para un problema, el equipo de soporte de NGINX puede solicitarle que elimine un módulo no compatible y reproduzca la falla como parte de nuestro proceso de soporte técnico, para que puedan verificar si la falla es causada o no por el módulo no compatible.
El proceso de creación de módulos dinámicos para NGINX Plus le permite aprovechar el amplio ecosistema de módulos de código abierto de NGINX y ejecutarlos en el núcleo completo y con soporte completo de NGINX Plus.
Si actualmente está utilizando NGINX Open Source con extensiones de terceros, lo más probable es que estas extensiones se puedan compilar y cargar en NGINX Plus.
Si desarrolla módulos comerciales o comunitarios, el nuevo proceso de compilación significa que sus usuarios pueden implementar sus módulos con NGINX Plus. Para obtener más información sobre cómo certificar un módulo comercial, consulte Módulos certificados NGINX Plus .
Si necesita ayuda para desarrollar un módulo o actualizar su archivo de configuración , consulte los siguientes recursos:
La lista de correo de desarrolladores de NGINX es el lugar al que acudir para obtener asistencia de la comunidad, y nuestro equipo de Servicios Profesionales también estará encantado de ayudarle.
Para probar usted mismo los módulos dinámicos con NGINX Plus, comience hoy mismo una 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.