Nginx动态加载模块编译

Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

动态模块编译允许我们在不重新编译整个Nginx的情况下,添加或删除特定的功能模块,从而灵活地定制我们的Nginx服务器。

传统上,在编译 Nginx 时,我们需要在配置文件中指定需要启用的模块,并重新编译整个 Nginx 服务器。但是,Nginx 动态模块编译提供了更加灵活的方式,可以在运行时加载或卸载特定的模块,而无需重新编译整个 Nginx。

使用Dockerfile编译三方模块

headers-more-nginx-module-src模块为例介绍:

FROM centos:7 AS Builder

ARG NGINX_VERSION=1.20.1

WORKDIR /usr/src
#解决软件的依赖关系,需要安装的软件包
RUN yum -y install wget zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make
RUN curl -L "https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz" -o "nginx-${NGINX_VERSION}.tar.gz"
RUN tar -zxC /usr/src -f nginx-${NGINX_VERSION}.tar.gz
RUN mv nginx-${NGINX_VERSION} nginx

ARG MODULE_VERSION=0.33
ARG MODULE_NAME=headers-more-nginx-module-src
ARG MODULE_SOURCE=https://github.com/nginx-with-docker/headers-more-nginx-module-src

RUN curl -L "${MODULE_SOURCE}/archive/refs/tags/v${MODULE_VERSION}.tar.gz" -o "${MODULE_VERSION}.tar.gz" && \
tar -zxC /usr/src -f ${MODULE_VERSION}.tar.gz && \
mv ${MODULE_NAME}-${MODULE_VERSION}/ ${MODULE_NAME} && \
cd /usr/src/nginx && \
echo $CONFARGS && \
./configure --with-compat $CONFARGS --add-dynamic-module=../${MODULE_NAME}/ && \
make modules

FROM scratch

COPY --from=Builder /usr/src/nginx/objs/ngx_http_headers_more_filter_module.so /

将生成的ngx_http_headers_more_filter_module.so放置在 Nginx 安装路径下的modules文件夹内即可。

通常情况下,在 Linux 系统上,Nginx 的安装路径为 /usr/local/nginx/etc/nginx。你可以通过 which nginx 命令查看 Nginx 的可执行文件路径,或者通过 nginx -V 命令查看编译时的配置参数。

加载并配置动态模块

现在,我们需要配置 Nginx 服务器以加载动态模块。

编辑 Nginx 配置文件 nginx.conf:

sudo vim /etc/nginx/nginx.conf

在 http 部分,添加以下内容:

load_module modules/ngx_http_headers_more_filter_module.so;

保存并关闭文件。

最后,重新启动 Nginx 服务器以使配置生效。

至此,我们成功实现了 Nginx 的动态模块编译。现在你可以根据需要自由地添加或删除其他的模块,而无需重新编译整个 Nginx 服务器。这为定制和扩展 Nginx 提供了更大的灵活性和便利性。


Nginx动态加载模块编译
https://blog.cikaros.top/doc/4c19be85.html
作者
Cikaros
发布于
2023年11月3日
许可协议