Compilación de varias etapas de Docker con nginx y modsecurity: no se puede abrir un objeto compartido

Compilación de varias etapas de Docker con nginx y modsecurity: no se puede abrir un objeto compartido

He creado una compilación de varias etapas de Docker para poder terminar con un contenedor pequeño y eficiente con la versión más reciente de nginx y algunos módulos compilados desde el código fuente.

Al final, copio el binario y algunos otros archivos en el contenedor final; esto funciona bien.

Además, estoy intentando configurar modsecurity como se indica aquí: https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-nginx/

Esto también funciona bien en el contenedor de compilación original. Pero cuando copio ngx_http_modsecurity_module.so al contenedor de destino final y ejecuto nginx, falla con:

[emerg] 1#1: dlopen() "/usr/local/nginx/modules/ngx_http_modsecurity_module.so" failed (libmodsecurity.so.3: cannot open shared object file: No such file or directory) in /etc/nginx/nginx.conf:10

El archivo definitivamente existe, por lo que el mensaje de error no es muy preciso ni muy útil.

Dado que funciona en el contenedor de compilación, sospecho que falta algo más, pero el mensaje de error no proporciona ninguna pista útil. ¿Qué podría faltar? ¿Dónde podría buscar más pistas? Gracias.

PD: empiezo desde debian: imagen estirada-slim

Respuesta1

Por casualidad lo descubrí ahora. Tuve que:

Copie también:

/usr/local/modsecurity

e instalar:

libgeoip1 libxml2 liblmdb0 libyajl2

Probablemente porque se trata de un módulo dinámico.

Respuesta2

Intentarhttps://hub.docker.com/r/krish512/modsecurity/, ya está construido con las últimas reglas de ModSecurity CRS

Respuesta3

Después de revisareste problemaObtuve la biblioteca ModSecurity correctamente instalada en Debian y disponible globalmente al agregar estas dos banderas a./configure

--prefix=/usr --with-ld-opt=/usr/lib


Antes de esto, mientras comprobaba ldd ngx_http_modsecurity_module.soque estaba obteniendo

libmodsecurity.so.3 => /opt/ModSecurity/src/.libs/libmodsecurity.so.3

que funcionaba bien hasta que limpié los archivos de compilación. Después de eliminar /opt/ModSecurityel directorio lddestaba regresando

libmodsecurity.so.3 => no encontrado

y openresty/nginx fallaba con el mismo mensaje de error de la pregunta.

información relacionada