nginx と modsecurity を使用した Docker マルチステージ ビルド - 共有オブジェクトを開けません

nginx と modsecurity を使用した Docker マルチステージ ビルド - 共有オブジェクトを開けません

最新の 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 は質問と同じエラー メッセージで失敗していました。

関連情報