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.so
que 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/ModSecurity
el directorio ldd
estaba regresando
libmodsecurity.so.3 => no encontrado
y openresty/nginx fallaba con el mismo mensaje de error de la pregunta.