Instalación de módulos de terceros#
Además de nuestros propios módulos dinámicos para
Angie y Angie PRO,
recopilamos y publicamos paquetes para varios módulos populares de terceros compatibles con nginx,
desarrollados fuera de nuestra empresa, en nuestro repositorio. Los paquetes de módulos de terceros se instalan desde nuestro repositorio igual que nuestros propios paquetes: Para usar el módulo instalado en la configuración,
cárgalo usando la directiva load_module en el contexto Truco Los nombres de los paquetes y los propios módulos en la configuración tienen los siguientes prefijos: Angie: Angie PRO: Nota No revisamos el código fuente de estos módulos
y no somos responsables de las consecuencias de su instalación;
los paquetes se compilan basándose en numerosas solicitudes
exclusivamente para la comodidad del usuario. Módulo Versión Paquetes Si el módulo que necesitas no está en la lista, puedes compilarlo por tu cuenta
para el Angie o el Angie PRO que instalaste desde nuestros paquetes. Angie y
Angie PRO cargan un módulo dinámico solo si se compiló: para el mismo producto, Angie o Angie PRO; para exactamente la misma versión; con opciones de compilación que coincidan. Nuestros paquetes se compilan sin la opción Los pasos usan como ejemplo
ngx-fancyindex: un módulo
elegido arbitrariamente que no está en nuestra lista. Otros módulos siguen los
mismos pasos, con su propia dirección de repositorio y sus propios nombres de
módulo, además de las bibliotecas o los módulos que exijan sus propias
instrucciones de compilación. No revisamos el código de los módulos compilados de este modo y no somos
responsables de las consecuencias de cargarlos. Instala el compilador, las bibliotecas con las que se compila Angie y las
herramientas para obtener el código fuente. En Debian y Ubuntu: En RHEL, Fedora y derivados, instala además Solo para Angie PRO: instala En RHEL, Fedora y derivados: Descarga y descomprime el código fuente de Angie de la versión instalada.
Para Angie PRO, es el código fuente de Angie de la misma versión; los
archivos de Angie PRO se le añaden en el paso 6. Angie PRO imprime su
versión con el sufijo Clona el repositorio del módulo junto al árbol de código fuente de Angie;
en el ejemplo, es ngx-fancyindex: Configura la compilación con las opciones del Angie o del Angie PRO
instalados, añadiendo el módulo. En RHEL, Fedora y derivados, define antes
los indicadores estándar del compilador de la distribución, con los que
también se compilan nuestros paquetes pero que Después, en cualquier distribución, ejecuta: eval hace que el shell respete las comillas de las opciones
impresas, de modo que los valores con espacios no se dividan. El segundo
sed elimina Si ./configure falla, corrige la causa, por ejemplo instalando
una biblioteca que falte, y elimina el directorio
En RHEL, Fedora y derivados, los errores de un paso omitido no lo nombran:
sin Solo para Angie PRO: sustituye los archivos de cabecera y la configuración
de compilación del árbol de código fuente por los de Angie PRO: El paquete reproduce la estructura del directorio Compila el módulo: El resultado es el archivo Instala el módulo: Tanto en Angie como en Angie PRO, carga el módulo con la directiva
load_module en el contexto Si el módulo no coincide con el Angie o el Angie PRO instalado,
Cada nueva versión de Angie o Angie PRO exige recompilar el módulo: rechaza una
compilación para la versión anterior con el error de versión. Si el servicio
está en ejecución cuando el paquete se actualiza a una versión nueva, el
paquete intenta pasarlo en vivo al nuevo ejecutable. Con el módulo compilado
para la versión anterior, el nuevo ejecutable rechaza la configuración, por lo
que el cambio no se produce: el paquete imprime un mensaje
Tras la actualización, recompila y reinstala el módulo, reutilizando su código
fuente de la primera compilación: repite los pasos 3 y del 5 al 8, empezando
en el directorio donde ejecutaste el paso 3 la primera vez; para Angie PRO,
repite antes el paso 2. El último paso usa install y no
cp, porque install escribe un archivo nuevo en lugar de
sobrescribir el que el servicio en ejecución ya ha cargado. Después reinicia el
servicio para que el nuevo ejecutable arranque con el módulo recompilado: Aquí no basta con recargar: la recarga se completa con éxito, pero el
ejecutable que está en marcha sigue usando la compilación del módulo que ya ha
cargado. Para cambiar al nuevo ejecutable y al módulo recompilado sin
interrumpir el servicio, usa una actualización del ejecutable en vivo en lugar de un reinicio.Instalación y configuración#
main:load_module modules/<module_name>.so;
angie-module-<name>angie-pro-module-<name>Lista de paquetes#
angie-module-auth-jwtangie-pro-module-auth-jwtangie-module-auth-ldapangie-pro-module-auth-ldapangie-module-auth-pamangie-pro-module-auth-pamangie-module-auth-spnegoangie-pro-module-auth-spnegoangie-module-auth-totpangie-pro-module-auth-totpangie-module-brotliangie-pro-module-brotliangie-module-cache-purgeangie-pro-module-cache-purgeangie-module-cgiangie-pro-module-cgiangie-module-combined-upstreamsangie-pro-module-combined-upstreamsangie-module-dav-extangie-pro-module-dav-extangie-module-dynamic-limit-reqangie-pro-module-dynamic-limit-reqangie-module-echoangie-pro-module-echoangie-module-enhanced-memcachedangie-pro-module-enhanced-memcachedangie-module-evalangie-pro-module-evalangie-module-geoip2angie-pro-module-geoip2angie-module-headers-moreangie-pro-module-headers-moreangie-module-http-auth-radiusangie-pro-module-http-auth-radiusangie-module-jwtangie-pro-module-jwtangie-module-keyvalangie-pro-module-keyvalangie-module-luaangie-pro-module-luaangie-module-modsecurityangie-pro-module-modsecurityangie-module-njsangie-pro-module-njsangie-module-ndkangie-pro-module-ndkangie-module-oidcangie-pro-module-oidcangie-module-opentracingangie-pro-module-opentracingangie-module-otelangie-pro-module-otelangie-module-postgresangie-pro-module-postgresangie-module-redis2angie-pro-module-redis2angie-module-rtmpangie-pro-module-rtmpangie-module-set-miscangie-pro-module-set-miscangie-module-subsangie-pro-module-subsangie-module-testcookieangie-pro-module-testcookieangie-module-unbrotliangie-pro-module-unbrotliangie-module-unzstdangie-pro-module-unzstdangie-module-uploadangie-pro-module-uploadangie-module-vodangie-pro-module-vodangie-module-vtsangie-pro-module-vtsangie-module-weserv-imagesangie-pro-module-weserv-imagesangie-module-zipangie-pro-module-zipangie-module-zstdangie-pro-module-zstdCompilación de un módulo para la versión en paquetes de Angie o Angie PRO#
--with-compat, por lo
que el Angie y el Angie PRO instalados desde ellos rechazan un módulo compilado
con las opciones por defecto de ./configure o con
--with-compat. El
procedimiento siguiente compila un módulo que el Angie o el Angie PRO
instalados desde paquetes sí cargan. No recompilas ni sustituyes Angie ni
Angie PRO: el paquete sigue instalado, y el módulo se compila por separado y
se carga en él. El módulo se compila en el árbol de código fuente de Angie de
la misma versión que el paquete instalado, con las opciones de compilación de
ese paquete. Angie PRO se distribuye solo como paquetes binarios, sin código
fuente, pero usa el mismo sistema de compilación que Angie. Para compilar un
módulo para Angie PRO, usas el mismo árbol de código fuente de Angie con los
archivos de cabecera y la configuración de compilación de Angie PRO del
paquete angie-pro-headers.$ sudo apt install build-essential libpcre2-dev zlib1g-dev libssl-dev libcrypt-dev curl git
redhat-rpm-config, que
aporta los ajustes del compilador con los que se compilan nuestros paquetes:$ sudo dnf install gcc make pcre2-devel zlib-devel openssl-devel libxcrypt-devel redhat-rpm-config git
angie-pro-headers de la misma versión
que el paquete angie-pro instalado. El paquete
angie-pro-headers instala los archivos de cabecera y la
configuración de compilación de Angie PRO en
/usr/include/angie-pro/. Procede del mismo repositorio que
angie-pro, y su disponibilidad depende de tu licencia. No depende de angie-pro, así que el gestor
de paquetes no hace coincidir sus versiones; indica la versión de forma
explícita. En Debian y Ubuntu:$ sudo apt install "angie-pro-headers=$(dpkg-query -W -f='${Version}' angie-pro)"
$ sudo dnf install "angie-pro-headers-$(rpm -q --qf '%{VERSION}-%{RELEASE}' angie-pro)"
(PRO), que el primer comando elimina:$ VERSION=$(sudo angie -v 2>&1 | sed -n 's|^Angie version: Angie/\([0-9.]*\).*|\1|p')
$ echo "$VERSION"
1.12.4
$ curl -fsSO "https://download.es.angie.software/files/angie-$VERSION.tar.gz"
$ tar -xzf "angie-$VERSION.tar.gz"
$ git clone https://github.com/aperezdc/ngx-fancyindex
angie -V no muestra:$ export CFLAGS="$(rpm --eval '%{optflags}')"
$ cd "angie-$VERSION"
$ eval ./configure $(sudo angie -V 2>&1 | sed -n 's/^configure arguments: //p' | sed 's/ --with-license//') \
--add-dynamic-module=../ngx-fancyindex
--with-license, con la que se compilan
algunos paquetes de Angie PRO: el ./configure de Angie no conoce
esta opción, y la opción afecta solo al ejecutable de Angie PRO, no al
módulo. En Angie, las opciones no la contienen.../angie-feature-cache antes de ejecutarlo de nuevo: las opciones del
paquete incluyen --feature-cache=../angie-feature-cache, por lo
que ./configure guarda ahí las comprobaciones fallidas y en la
siguiente ejecución las informa como
using cached check ... not found.redhat-rpm-config, ./configure se detiene con
the invalid value in --with-ld-opt="value", y sin el
CFLAGS exportado, con C99 variadic macros support is not found.$ cp -r /usr/include/angie-pro/. src/
$ cp src/objs/* objs/
src, por lo que
el primer comando sustituye los archivos de cabecera. El subdirectorio
objs del paquete, ahora en src/objs, contiene la
configuración de compilación de Angie PRO (ngx_auto_config.h y
ngx_auto_headers.h); el segundo comando copia esos archivos en el
directorio objs que creó ./configure. Hacen falta ambos
comandos. Los archivos de cabecera dan al módulo las estructuras y la firma
del producto de Angie PRO. La configuración de compilación fija las
opciones con las que se compila el módulo: Angie PRO tiene opciones que el
./configure de Angie no conoce, y un módulo compilado con la
configuración de Angie no coincidiría con la disposición de las estructuras
de Angie PRO.$ make modules
objs/ngx_http_fancyindex_module.so.$ sudo install -m 644 objs/ngx_http_fancyindex_module.so /etc/angie/modules/
Carga y actualización#
main y luego comprueba y recarga la
configuración:load_module modules/ngx_http_fancyindex_module.so;
$ sudo angie -t && sudo systemctl reload angie
angie -t falla con un mensaje que indica cuál es la discrepancia:module "file" was built for "Angie" but you are running "Angie PRO",
o lo mismo con los productos intercambiados — el módulo se compiló para el
otro producto;module "file" version module_version instead of angie_version —
el módulo se compiló para otra versión; cada versión se imprime como un único
número entero, en el que la versión menor y el número de parche se completan
con ceros a la izquierda hasta tres dígitos;module "file" is not binary compatible — el módulo se compiló con
otras opciones de compilación.Binary upgrade failed y el ejecutable anterior sigue atendiendo las
solicitudes.$ sudo angie -t && sudo systemctl restart angie