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