最新の nginx バージョンとソースからコンパイルされたいくつかのモジュールを含む、小型で軽量なコンテナーを作成できるように、docker マルチステージ ビルドを作成しました。
最後に、バイナリと他のいくつかのファイルを最終コンテナーにコピーします。これは正常に動作します。
さらに、ここで指示されているように modsecurity を設定しようとしています: https://www.nginx.com/blog/compiling-and-installing-modsecurity-for-open-source-nginx/
これは、元のビルド コンテナーでも正常に動作します。ただし、ngx_http_modsecurity_module.so を最終ターゲット コンテナーにコピーして nginx を起動すると、次のエラーで失敗します。
[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
ファイルは確かに存在するので、エラー メッセージはあまり正確ではなく、あまり役に立ちません。
ビルド コンテナーでは動作するため、何か他のものが欠けているのではないかと考えていますが、エラー メッセージには役立つ手がかりが何も示されていません。何が欠けているのでしょうか。さらに手がかりを探すにはどこを探せばよいでしょうか。ありがとうございます。
PS: debian:stretch-slimイメージから始めます
答え1
偶然にも今それを発見しました。私はそうしなければなりませんでした:
以下もコピーします:
/usr/local/modsecurity
そしてインストールします:
libgeoip1 libxml2 liblmdb0 libyajl2
おそらくこれは動的モジュールだからでしょう。
答え2
試すhttps://hub.docker.com/r/krish512/modsecurity/最新のModSecurity CRSルールで構築済みです
答え3
確認後この問題私は、この2つのフラグを追加することで、ModSecurityライブラリをDebianに適切にインストールし、グローバルに利用できるようになりました。./configure
--prefix=/usr --with-ld-opt=/usr/lib
これに先立ち、ldd ngx_http_modsecurity_module.so
私はチェックしながら
libmodsecurity.so.3 => /opt/ModSecurity/src/.libs/libmodsecurity.so.3
ビルドファイルをクリーンアップするまでは正常に動作していました。/opt/ModSecurity
ディレクトリを削除しldd
た後、
libmodsecurity.so.3 => 見つかりません
そして、openresty/nginx は質問と同じエラー メッセージで失敗していました。