基于docker 镜像的 nginx 编译添加第三方模块
Posted shark_西瓜甜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于docker 镜像的 nginx 编译添加第三方模块相关的知识,希望对你有一定的参考价值。
镜像
镜像就用 官方镜像 alpine 版本,
https://hub.docker.com/_/nginx/tags
此示例中 使用 docker pull nginx:1.23.3-alpine
编译环境
首先启动个容器,用于编辑环境,之后把编译好的 nginx 可执行程序拷贝出来。
docker run -it --name nginx-build nginx:1.23.3-alpine sh
apk add --no-cache --virtual .build-deps \\
gcc \\
libc-dev \\
make \\
openssl-dev \\
pcre-dev \\
zlib-dev \\
linux-headers \\
curl \\
gnupg \\
libxslt-dev \\
gd-dev \\
geoip-dev
第三方模块
主动对后端服务器进行状态检查
目前由于 淘宝主动后端检查版本和最新的 1.20.2 版本兼容(2023.01.05)
所有需要下载的 nginx 源码包是 nginx-1.20.2
wget http://nginx.org/download/nginx-1.20.2.tar.gz
需要进入 nginx-1.20.2 的源码目录打个补丁, 注意这里需要将 nginx-1.20.2 的源码包拷贝到 我们上一不创建的环境中再执行打补丁,因为需要在兼容的环境总大打补丁。
打补丁命令: patch -p1 < ../nginx_upstream_check_module-master/check_1.20.1+.patch
编译的时候增加如下参数
--add-module=/path/to/nginx_upstream_check_module-master
配置指南: http://tengine.taobao.org/document_cn/http_upstream_check_cn.html
内容替换
在响应正文中使用正则表达式和固定字符串进行文本替换。
一个第三方的替换模块:ngx_http_substitutions_filter_module,来实现我们的各种需求。
经过测试,这个模块至少有如下实用功能:
①、支持多次替换
②、支持正则替换
③、支持中文替换
Ps:略有遗憾的是,这个替换不能使用到 if 判断模块内,否则就超神了。。。
github 手动下载地址:https://github.com/yaoweibin/ngx_http_substitutions_filter_module/
编译的时候增加如下参数
--add-module=/path/to/ngx_http_substitutions_filter_module-master
解码
对后端返回的 url 进行解码
https://github.com/openresty/set-misc-nginx-module#installation
这个模块是 openresty 的,下载地址: https://github.com/openresty/set-misc-nginx-module/tags
还有依赖的模块 https://codeload.github.com/vision5/ngx_devel_kit/zip/refs/tags/v0.3.2
wget https://github.com/openresty/set-misc-nginx-module/releases/tag/v0.33
编译的时候增加如下参数
--add-module=/path/to/ngx_devel_kit-0.3.2 --add-module=/path/to/set-misc-nginx-module-0.33
开始构建
1 将这些需要的第三方模块拷贝到编译环境容器 nginx-build 中的 root 目录下
docker cp 模块目录 nginx-build:/root/
2 将 nginx-12.0.2 的源码也拷贝到编译环境容器 nginx-build 中的 root 目录下
docerk cp nginx-1.20.2 nginx-build:/root/
3 在编译环境容器 nginx-build 中获取到原来的编译参数
nginx -V
4 将获取到的原编译参数和模块的编译参数进行组合
5 执行 make
6 将编译好的可执行文件 objs/nginx 拷贝出来
7 将拷贝出来的 nginx 文件拷贝到一个新的容器内,并构建新的容器
dockerfile
FROM nginx:1.23.3-alpine
LABEL description="根据自己构建的情况,编写描述信息"
COPY ./nginx /usr/sbin/nginx
RUN apk add --no-cache --virtual .build-deps \\
openssl-dev \\
pcre-dev \\
zlib-dev \\
linux-headers \\
libxslt-dev \\
gnupg \\
gd-dev geoip-dev
docker build -t nginx:1.20.2-alpine-upstream .
使用 openresty 替代nginx
https://hub.docker.com/r/openresty/openresty
下载镜像
https://hub.docker.com/_/nginx/tags
docker run -v /my/custom/conf.d:/etc/nginx/conf.d openresty/openresty:alpine
docker pull openresty/openresty:1.21.4.1-4-alpine-amd64
docker pull openresty/openresty:1.21.4.1-alpine-aarch64
以上是关于基于docker 镜像的 nginx 编译添加第三方模块的主要内容,如果未能解决你的问题,请参考以下文章
docker制作nginx+nginx-module-vts镜像基于alpine镜像