docker - 我需要在 NGINX 官方 Docker 的映像中进行哪些更改才能拥有 set-misc-nginx 模块?
问题描述
我需要使用这个库中的随机数生成器,但我想使用官方的 nginx 映像,所以我试图查看它的源代码并执行安装这个库所需的更改。
但我不知所措,因为这些说明似乎不符合 NGINX 在该 Dockerfile 中的安装方式。
如何在官方 NGINX Dockerfile 中安装 set-misc-nginx?
解决方案
您可以扩展官方 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/
注意:此示例是一个多阶段构建,它使用docker
构建增强来克隆存储库(取决于您的版本,docker
您可能必须启用实验功能)。
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存储库(使用Modsecurity和Modsecurity-nginxnginx
扩展的图像)。
推荐阅读
- sql - 具有相同列但不匹配记录的 SQL Server 表
- c# - 将鼠标光标移动到特定元素的问题
- ios - Nativescript iOS 6.4.2 网格布局抛出错误:未定义不是对象(评估'this.rows [measureSpec.getRowIndex()].children')
- python - 如何在 Python 中使用 Google Drive API v3 更改所有者?
- javascript - 如何在另一个组件中运行 React 函数
- assembly - 为什么反汇编代码有不同的指令大小?CPU如何知道要加载多少字节?
- php - array_key_exists - 键确实存在但它什么也不返回,完全难倒
- python - 我怎样才能得到元组Python中每个元素的总和
- ios - Azure AMS:如何获取 Sidecar WebVTT 以在 iOS 原生播放器中显示字幕/字幕?
- azure-devops - 在发布到生产之前检查代码是否在主分支上