使用 nginx 和 modsecurity 進行 Docker 多階段建置 - 無法開啟共用對象

使用 nginx 和 modsecurity 進行 Docker 多階段建置 - 無法開啟共用對象

我創建了一個 docker 多階段構建,最終能夠得到一個小型、精簡的容器,其中包含最新的 nginx 版本和一些從原始碼編譯的模組。

最後,我將二進位檔案和其他一些檔案複製到最終容器中 - 這工作正常。

此外,我正在嘗試按照此處的說明設定 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

檢查後這個問題我在 Debian 上正確安裝了 ModSecurity lib,並且透過添加這兩個標誌來全域可用./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/ModSecuritydir後ldd返回

libmodsecurity.so.3 => 未找到

openresty/nginx 失敗並出現與問題相同的錯誤訊息。

相關內容