我需要在NGINX官方Docker的镜像中更改什么才能拥有set-misc-nginx模块?

xytpbqjk  于 2024-01-06  发布在  Docker
关注(0)|答案(2)|浏览(301)

我需要使用这个库中的随机数生成器,但我想使用official nginx image,所以我试图查看它的源代码并执行安装这个库所需的更改。
但我不知所措,因为说明似乎不适合NGINX在Dockerfile中的安装方式。
如何在官方NGINX Dockerfile中安装set-misc-nginx?

lsmd5eda

lsmd5eda1#

您可以扩展official ngnix来构建动态模块,然后将它们加载到nginx中:

  1. # syntax=docker/dockerfile:experimental
  2. ARG NGINX_VERSION
  3. FROM nginx:${NGINX_VERSION} as build
  4. RUN apt-get update && \
  5. apt-get install -y \
  6. openssh-client \
  7. git \
  8. wget \
  9. libxml2 \
  10. libxslt1-dev \
  11. libpcre3 \
  12. libpcre3-dev \
  13. zlib1g \
  14. zlib1g-dev \
  15. openssl \
  16. libssl-dev \
  17. libtool \
  18. automake \
  19. gcc \
  20. g++ \
  21. make && \
  22. rm -rf /var/cache/apt
  23. RUN wget "http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" && \
  24. tar -C /usr/src -xzvf nginx-${NGINX_VERSION}.tar.gz
  25. RUN mkdir -p -m 0600 ~/.ssh && \
  26. ssh-keyscan github.com >> ~/.ssh/known_hosts
  27. WORKDIR /src/ngx_devel_kit
  28. RUN --mount=type=ssh git clone [email protected]:simpl/ngx_devel_kit .
  29. WORKDIR /src/set-misc-nginx-module
  30. RUN --mount=type=ssh git clone [email protected]:openresty/set-misc-nginx-module.git .
  31. WORKDIR /usr/src/nginx-${NGINX_VERSION}
  32. RUN NGINX_ARGS=$(nginx -V 2>&1 | sed -n -e 's/^.*arguments: //p') \
  33. ./configure --with-compat --with-http_ssl_module --add-dynamic-module=/src/ngx_devel_kit --add-dynamic-module=/src/set-misc-nginx-module ${NGINX_ARGS} && \
  34. make modules
  35. FROM nginx:${NGINX_VERSION}
  36. COPY nginx.conf /etc/nginx/nginx.conf
  37. COPY --from=build /usr/src/nginx-${NGINX_VERSION}/objs/ngx_http_set_misc_module.so /usr/src/nginx-${NGINX_VERSION}/objs/ndk_http_module.so /usr/lib/nginx/modules/

字符串

备注:这个例子是一个multi-staged build,它使用dockerbuild enhancements来克隆存储库(取决于你的docker版本,你可能需要enable experimental features)。

您可以在最终映像中复制的nginx.conf中加载模块:

  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. load_module /usr/lib/nginx/modules/ndk_http_module.so;
  6. load_module /usr/lib/nginx/modules/ngx_http_set_misc_module.so;
  7. events {
  8. worker_connections 1024;
  9. }
  10. http {
  11. ...
  12. }


创建镜像:DOCKER_BUILDKIT=1 docker build --rm --ssh=default --build-arg NGINX_VERSION=1.17.3 --network host -t so:57739560 .
运行容器:docker run --rm -it -p 80:80 so:57739560
关于使用官方nginx镜像构建动态模块的另一个例子,你可以查看我的nginx-modsecurity repo(nginx镜像扩展了ModsecurityModsecurity-nginx)。

展开查看全部
fnatzsnv

fnatzsnv2#

有一种方法可以将第三方模块添加为链接https://github.com/nginxinc/docker-nginx/tree/master/modules中的共享模块
1.查看docker-nginx代码
1.切换到modules目录
1.通过指定set-misc模块构建Docker

  1. docker build --build-arg ENABLED_MODULES="ndk set-misc" -t my-nginx-with-set-misc.

字符串

相关问题