已经编译安装的nginx/tenginx编译增加新模块

时间:2022-05-15 09:19:09

只适用于自行编译安装的nginx配置

业务变更带来的Nginx增加模块需求

由于业务从php转为go开发,需要用到Http2的协议。这种协议在Nginx上需要http_v2_module这个模块的支持,但是现有服务器上,查看Nginx的编译参数中,并未添加。所以需要再次编译替换nginx

[root@ip-172-60-0-193 ~]# nginx -V
Tengine version: Tengine/2.3.2
nginx version: nginx/1.17.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/data/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=modules/ngx_http_reqstat_module --add-module=modules/ngx_http_user_agent_module --add-module=modules/ngx_http_upstream_check_module --add-module=modules/ngx_http_upstream_dynamic_module --add-module=modules/ngx_http_upstream_session_sticky_module --add-module=modules/ngx_http_upstream_consistent_hash_module --with-pcre=/root/web/pcre-8.37

从以上命令的输出中,可以看到。当前的Nginx并未添加http_v2_module模块的支持

为nginx添加新的模块

  1. 找到当时编译安装的Nginx源码,或者相同版本的源码包。解压后,进行重新编译

  2. 编译时,使用之前的编译参数,并添加上对于新模块的支持

    cd tengine-2.3.2
    # 使用新的编译参数
    ./configure --user=www --group=www --prefix=/data/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_realip_module --add-module=modules/ngx_http_reqstat_module --add-module=modules/ngx_http_user_agent_module --add-module=modules/ngx_http_upstream_check_module --add-module=modules/ngx_http_upstream_dynamic_module --add-module=modules/ngx_http_upstream_session_sticky_module --add-module=modules/ngx_http_upstream_consistent_hash_module --with-pcre=/root/web/pcre-8.37
  3. 进行make。一定要注意,不能进行make install

    # 上边编译没有报错的话,进行make
    make
  4. 关闭现有的Nginx,并进行nginx二进制文件的替换

    # make成功后,新的nginx二进制,在编译目录的objs目录下
    # 查看编译后的Nginx,都支持哪些模块
    objs/nginx -m Tengine version: Tengine/2.3.2
    nginx version: nginx/1.17.3
    nginx: loaded modules:
    nginx: ngx_core_module (static)
    ...
    nginx: ngx_http_v2_module (static)
    ... # 可以看到我们新编译后的nginx,已经添加好了我们需要的模块
    systemctl stop nginx cd nginx/sbin
    cp nginx nginx_old
    mv ${make_dir}/objs/nginx nginx/sbin systemctl start nginx
  5. 查看替换后的Nginx,对于新模块的支持

    # 再次查看当前系统上Nginx的模块
    nginx -m nginx -V

到这里,整个Nginx重新编译安装增加新模块操作已完成。其他模块也可以按照此操作执行