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

파일이 확실히 존재하므로 오류 메시지는 그다지 정확하지도 않고 도움이 되지도 않습니다.

빌드 컨테이너에서 작동하기 때문에 다른 것이 누락된 것 같지만 오류 메시지에는 유용한 단서가 제공되지 않습니다. 무엇이 누락되었을 수 있나요? 추가 단서는 어디에서 찾을 수 있나요? 감사해요.

추신: 나는 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/ModSecuritydir을 제거한 후 ldd돌아 왔습니다.

libmodsecurity.so.3 => 찾을 수 없음

openresty/nginx는 질문과 동일한 오류 메시지로 인해 실패했습니다.

관련 정보