【问题标题】:What do I need to change in NGINX official Docker's image to have the set-misc-nginx module?我需要在 NGINX 官方 Docker 的映像中进行哪些更改才能拥有 set-misc-nginx 模块?
【发布时间】:2022-01-18 17:31:18
【问题描述】:

我需要使用来自this library 的随机数生成器,但我想使用official nginx image,所以我试图查看它的源代码并执行安装此库所需的更改。

但我不知所措,因为这些说明似乎不符合 NGINX 在该 Dockerfile 中的安装方式。

如何在官方 NGINX Dockerfile 中安装 set-misc-nginx?

【问题讨论】:

    标签: docker nginx


    【解决方案1】:

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

    # syntax=docker/dockerfile:experimental
    ARG NGINX_VERSION
    FROM nginx:${NGINX_VERSION} as build
    
    RUN apt-get update && \
        apt-get install -y \
            openssh-client \
            git \
            wget \
            libxml2 \
            libxslt1-dev \
            libpcre3 \
            libpcre3-dev \
            zlib1g \
            zlib1g-dev \
            openssl \
            libssl-dev \
            libtool \
            automake \
            gcc \
            g++ \
            make && \
        rm -rf /var/cache/apt
    
    RUN wget "http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" && \
        tar -C /usr/src -xzvf nginx-${NGINX_VERSION}.tar.gz
    
    RUN mkdir -p -m 0600 ~/.ssh && \
        ssh-keyscan github.com >> ~/.ssh/known_hosts
    
    WORKDIR /src/ngx_devel_kit
    RUN --mount=type=ssh git clone git@github.com:simpl/ngx_devel_kit .
    
    WORKDIR /src/set-misc-nginx-module
    RUN --mount=type=ssh git clone git@github.com:openresty/set-misc-nginx-module.git .
    
    WORKDIR /usr/src/nginx-${NGINX_VERSION}
    RUN NGINX_ARGS=$(nginx -V 2>&1 | sed -n -e 's/^.*arguments: //p') \
        ./configure --with-compat --with-http_ssl_module --add-dynamic-module=/src/ngx_devel_kit --add-dynamic-module=/src/set-misc-nginx-module ${NGINX_ARGS} && \
        make modules
    
    FROM nginx:${NGINX_VERSION}
    
    COPY nginx.conf /etc/nginx/nginx.conf
    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,它使用docker build enhancements 克隆存储库(取决于您的docker 版本,您可能需要enable experimental features)。

    您可以在nginx.conf 中加载模块,该模块已复制到最终图像中:

    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    load_module /usr/lib/nginx/modules/ndk_http_module.so;
    load_module /usr/lib/nginx/modules/ngx_http_set_misc_module.so;
    
    events {
        worker_connections  1024;
    }
    
    http {
        ...
    }
    

    构建镜像: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 存储库(nginx 图像扩展了ModsecurityModsecurity-nginx)。

    【讨论】:

    • 哇,谢谢你的回答,这么多新东西要学!我有一个问题:如果你来FROM nginx:${NGINX_VERSION},你为什么要在这个命令RUN wget "http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" && ...再次下载nginx?
    • @PedroD 我正在将与构建阶段的映像相同版本的源下载到make 模块。
    • @Christoph Kluge 感谢您的编辑,也注意到了这一点,但一直没有时间更新它。
    • 我们真的是在扩展官方形象吗?我们只是在其中再次构建一个新的 nginx,不是吗?
    • 好的,谢谢。我从你的 Dockerfile 开始,我正在调整它,因为 github.com/SpiderLabs/owasp-modsecurity-crs 迁移到 github.com/coreruleset/coreruleset 完成后我会发布我的
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2021-12-12
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多