Ich habe einen Docker-Multistage-Build erstellt, um am Ende einen kleinen, schlanken Container mit der aktuellsten Nginx-Version und einigen aus dem Quellcode kompilierten Modulen zu erhalten.
Am Ende kopiere ich die Binärdatei und einige andere Dateien in den endgültigen Container – das funktioniert einwandfrei.
Zusätzlich versuche ich, Modsecurity wie hier beschrieben einzurichten: https://www.nginx.com/blog/kompilieren-und-installieren-von-modsecurity-für-open-source-nginx/
Dies funktioniert auch im ursprünglichen Build-Container einwandfrei. Aber wenn ich ngx_http_modsecurity_module.so in den endgültigen Zielcontainer kopiere und nginx starte, schlägt es mit folgendem Fehler fehl:
[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
Die Datei existiert auf jeden Fall, daher ist die Fehlermeldung weder besonders präzise noch besonders hilfreich.
Da es im Build-Container funktioniert, vermute ich, dass noch etwas fehlt, aber die Fehlermeldung gibt keine hilfreichen Hinweise? Was könnte fehlen? Wo könnte ich nach weiteren Hinweisen suchen? Danke.
PS: Ich beginne mit dem Image debian:stretch-slim
Antwort1
Durch Zufall habe ich es jetzt herausgefunden. Ich musste:
Kopieren Sie außerdem:
/usr/local/modsecurity
und installieren:
libgeoip1 libxml2 liblmdb0 libyajl2
Wahrscheinlich, weil es sich hierbei um ein dynamisches Modul handelt.
Antwort2
Versuchenhttps://hub.docker.com/r/krish512/modsecurity/, es ist bereits mit den neuesten ModSecurity CRS-Regeln erstellt
Antwort3
Nach der Überprüfungdieses ProblemIch habe die ModSecurity-Bibliothek ordnungsgemäß unter Debian installiert und global verfügbar gemacht, indem ich diese beiden Flags hinzugefügt habe zu./configure
--prefix=/usr --with-ld-opt=/usr/lib
Zuvor beim Checken ldd ngx_http_modsecurity_module.so
bekam ich
libmodsecurity.so.3 => /opt/ModSecurity/src/.libs/libmodsecurity.so.3
das funktionierte gut, bis ich die Build-Dateien bereinigte. Nach dem Entfernen kehrte /opt/ModSecurity
dir zurückldd
libmodsecurity.so.3 => nicht gefunden
und openresty/nginx schlug mit derselben Fehlermeldung wie in der Frage fehl.