我創建了一個 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/ModSecurity
dir後ldd
返回
libmodsecurity.so.3 => 未找到
openresty/nginx 失敗並出現與問題相同的錯誤訊息。