나는 최신 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
파일이 확실히 존재하므로 오류 메시지는 그다지 정확하지도 않고 도움이 되지도 않습니다.
빌드 컨테이너에서 작동하기 때문에 다른 것이 누락된 것 같지만 오류 메시지에는 유용한 단서가 제공되지 않습니다. 무엇이 누락되었을 수 있나요? 추가 단서는 어디에서 찾을 수 있나요? 감사해요.
추신: 나는 debian:stretch-slim 이미지에서 시작합니다.
답변1
우연히 지금 알게 됐어요. 나는 다음을 수행해야 했다:
또한 다음을 복사하세요.
/usr/local/modsecurity
그리고 다음을 설치하세요:
libgeoip1 libxml2 liblmdb0 libyajl2
아마도 이것이 동적 모듈이기 때문일 것입니다.
답변2
노력하다https://hub.docker.com/r/krish512/modsecurity/, 이미 최신 ModSecurity CRS 규칙으로 구축되었습니다.
답변3
확인 후이 문제ModSecurity lib가 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
dir을 제거한 후 ldd
돌아 왔습니다.
libmodsecurity.so.3 => 찾을 수 없음
openresty/nginx는 질문과 동일한 오류 메시지로 인해 실패했습니다.