CN114237609B - 一种动态适应及加载预编译的Nginx模块的方法及系统 - Google Patents

一种动态适应及加载预编译的Nginx模块的方法及系统 Download PDF

Info

Publication number
CN114237609B
CN114237609B CN202111313350.XA CN202111313350A CN114237609B CN 114237609 B CN114237609 B CN 114237609B CN 202111313350 A CN202111313350 A CN 202111313350A CN 114237609 B CN114237609 B CN 114237609B
Authority
CN
China
Prior art keywords
nginx
compiling
version
loading
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111313350.XA
Other languages
English (en)
Other versions
CN114237609A (zh
Inventor
甄志会
杨金全
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Keynote Network Inc
Original Assignee
Beijing Keynote Network Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Keynote Network Inc filed Critical Beijing Keynote Network Inc
Priority to CN202111313350.XA priority Critical patent/CN114237609B/zh
Publication of CN114237609A publication Critical patent/CN114237609A/zh
Application granted granted Critical
Publication of CN114237609B publication Critical patent/CN114237609B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及计算机技术领域,具体提供了一种动态适应及加载预编译的Nginx模块的方法及系统,包括:根据版本差异及编译选项构造编译对照表格及加载对照表格;利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数及加载功能模块函数,根据加载对照表格匹配相应的功能模块so动态库,并修改动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。利用构造编译对照表格及加载对照表格的方法和动态加载预编译模块的方法,动态适应不同环境的Nginx版本及编译选项,避免了在不同环境下的手工编译模块的复杂性,降低编译模块的次数,减少模块的存储占用空间,降低产品的部署难度。

Description

一种动态适应及加载预编译的Nginx模块的方法及系统
技术领域
本发明涉及计算机技术领域,具体涉及一种动态适应及加载预编译的Nginx模块的方法及系统。
背景技术
部署Nginx及第三方功能模块时有通常两种方式:第一种方式是下载源码进行编译,一次性将Nginx源码和第三方功能模块的源码全部编译完毕,然后再将编译后的二进制文件拷贝到对应的环境。另外一种方式是采用系统自带的yum、apt-get等软件包管理工具安装预编译的Nginx二进制包。
由于不同版本Nginx有不同的结构定义,编译选项不同也会造成引用的条件编译指令不一致,Nginx内核为了保证软件整体运行的稳定性,在编译功能模块的so动态库时,会将编译期间的Nginx版本信息存储到so动态库的常量区,并将编译选项影响的条件编译指令编码为一个静态的编译签名字符串存储到so动态库的常量区。Nginx内核在加载功能模块时,会检测该功能模块的编译版本信息和编译签名字符串,如果功能模块的编译版本和编译签名与当前运行的Nginx内核的编译版本或编译签名不一致,则认为是不兼容的功能模块不予加载。
所以,默认情况下,当需要在原有已成功部署的Nginx环境上追加新的功能模块时,必须采用和原有Nginx版本一致的Nginx源码,并且使用相同的编译选项编译新的功能模块,才能将新的功能模块追加到已有Nginx环境中。
然而,在实际环境中,由于部署Nginx的环境多样性,经常会出现不同的Nginx环境的版本不一致、编译选项不一致的情况,如果需要在多个Nginx环境下添加同一功能模块,必须构建多个Nginx环境并使用相应的编译选项进行多次编译,无法简单的将预编译好的功能模块添加到已有的Nginx环境中,尤其是在非源码发布功能模块的情况下,维护环境对应的预编译模块变的非常复杂。
发明内容
鉴于现有技术中存在的技术缺陷和技术弊端,本发明实施例提供克服上述问题或者至少部分地解决上述追加预编译的Nginx功能模块时的适配难度高的问题的一种,具体方案如下:
本发明提供了一种动态适应及加载预编译的Nginx模块的方法,包括步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
步骤2,根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格,其中,构造编译对照表和加载该编译对照表内的动态库名称命名规则需保持一致;
步骤3,按照编译对照表格将Nginx功能模块编译为多个so动态库;
步骤4,利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
优选地,所述步骤1中的“并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异”具体包括:
使用统一的表格记录并管理其中的差异;
其中,功能模块涉及的Nginx内核结构表包含涉及的头文件名称、涉及的结构名称及涉及的结构字段;
Nginx内核结构变更表包含头文件名称、Nginx版本及变更的结构名称;
功能模块涉及的Nginx版本差异表包含Nginx版本、变更的结构名称及兼容的Nginx版本列表;
功能模块涉及的Nginx编译选项表包含涉及的编译选项、编译选项默认值及编译选项签名位置。
优选地,所述步骤2中编译对照表生成规则为:筛选出Nginx编译选项表内每个默认值为关闭的编译选项,然后对筛选后的选项循环组合,每个编译选项组合和Nginx版本差异表内每个Nginx版本生成一个按照动态库名称命名规则确定名称的动态库。
优选地,所述步骤2中加载对照表生成规则为:筛选出Nginx版本差异表内每组相邻的Nginx版本之间的所有版本,同组内所有Nginx版本均可以加载组内最低版本的动态库。
优选地,所述动态库名称命名规则为:Nginx发行版名称+Nginx内核版本号+Nginx编译选项表内默认值为关闭的编译选项编译签名值组合。
优选地,所述步骤3具体包括:利用步骤2内生成的编译对照表编写编译脚本,循环对照表内所有的Nginx发行版版本和编译选项组合,将功能模块编译为按照动态库名称命名规则的多个so动态库。
优选地,所述步骤4具体包括:利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,获取当前Nginx进程的发行版名称、当前Nginx进程的内核版本和当前Nginx进程的编译选项签名,然后利用步骤2内生成的加载对照表规则,确定被加载的动态库名称,并修改动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配,最后调用Nginx自带的load_module函数加载动态库。
本发明还提供了一种动态适应及加载预编译的Nginx模块的系统,包括:
差异获取模块,用于获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
编译模块,用于根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格,其中,构造编译对照表和加载该编译对照表内的动态库名称命名规则需保持一致;并按照编译对照表格将Nginx功能模块编译为多个so动态库;
匹配模块,用于利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
本发明还提供了一种电子设备,包括存储器、处理器,所述处理器用于执行存储器中存储的计算机管理类程序时实现如权利要求1-7任一项所述的动态适应及加载预编译的Nginx模块的方法的步骤。
本发明还提供了一种计算机可读存储介质,其上存储有计算机管理类程序,所述计算机管理类程序被处理器执行时实现如权利要求1-7任一项所述的动态适应及加载预编译的Nginx模块的方法的步骤。
本发明具有以下有益效果:
本发明的一种动态适应及加载预编译的Nginx模块的方法及系统,其中方法包括步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;步骤2,根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格;步骤3,按照编译对照表格将Nginx功能模块编译为多个so动态库;步骤4,利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
该方案可以大大降低追加预编译的Nginx功能模块时的适配难度。利用构造编译对照表格及加载对照表格的方法和动态加载预编译模块的方法,动态适应不同环境的Nginx版本及编译选项,避免了在不同环境下的手工编译模块的复杂性,降低编译模块的次数,减少模块的存储占用空间,降低产品的部署难度。
附图说明
图1为本发明动态适应及加载预编译的Nginx模块的方法原理流程图;
图2为本发明提供的一种可能的电子设备的硬件结构示意图;
图3为本发明提供的一种可能的计算机可读存储介质的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例提供了一种动态适应及加载预编译的Nginx模块的方法,包括步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;步骤2,根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格;步骤3,按照编译对照表格将Nginx功能模块编译为多个so动态库;步骤4,利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
即,根据版本差异及编译选项构造编译对照表格及加载对照表格;利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数及加载功能模块函数,根据加载对照表格匹配相应的功能模块so动态库,并修改动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
该方案可以大大降低追加预编译的Nginx功能模块时的适配难度。利用构造编译对照表格及加载对照表格的方法和动态加载预编译模块的方法,动态适应不同环境的Nginx版本及编译选项,避免了在不同环境下的手工编译模块的复杂性,降低编译模块的次数,减少模块的存储占用空间,降低产品的部署难度。
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx模块:Nginx内部结构是由Nginx核心部分和一系列的功能模块所组成。这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展。通常所说的Nginx模块指对Nginx功能进行扩展的功能模块。
在一个具体的实施场景中,下面将结合示例对本发明作进一步的详细描述,示例中,我们假设Nginx功能模块实现的功能为在http请求头内追加一个名称为“X-REQ”的请求头,且在http响应头内追加一个名称为“X-REP”的响应头。
(1),整理Nginx功能模块涉及的Nginx内核结构,并根据涉及的内核结构整理版本差异、整理Nginx功能模块涉及的编译选项。
所有Nginx模块均涉及ngx_core.h头文件内ngx_http_core_main_conf_t结构。
追加请求头及响应头,涉及操作ngx_http_request.h头文件ngx_http_request_t结构的headers_in和headers_out涉及的编译选项包括:NGX_HTTP_GZIP,NGX_HTTP_X_FORWARDED_FOR,NGX_HTTP_REALIP,NGX_HTTP_HEADERS,NGX_HTTP_DAV,NGX_HTTP_CACHE。
其中,各种表格具体结构如下;
功能模块涉及的Nginx内核结构表(11):
Figure BDA0003342653340000071
Nginx内核结构变更表(12):
Figure BDA0003342653340000072
Nginx从1.11.5以上才支持动态加载功能模块,目前已有1.11.5-1.20.1总共68个小版本。功能模块涉及的Nginx版本差异表(13):
Figure BDA0003342653340000073
Figure BDA0003342653340000081
Nginx目前共有34个编译选项。功能模块涉及的Nginx编译选项表(14):
<u>涉及的编译选项</u> <u>编译选项默认值</u> <u>编译选项签名位置</u>
<u>NGX_HTTP_GZIP</u> <u>ON</u> <u>26</u>
<u>NGX_HTTP_X_FORWARDED_FOR</u> <u>ON</u> <u>28</u>
<u>NGX_HTTP_REALIP</u> <u>OFF</u> <u>29</u>
<u>NGX_HTTP_HEADERS</u> <u>OFF</u> <u>30</u>
<u>NGX_HTTP_DAV</u> <u>OFF</u> <u>31</u>
<u>NGX_HTTP_CACHE</u> <u>ON</u> <u>32</u>
(2)根据版本差异及编译选项构造编译对照表格及加载对照表格。
筛选出Nginx编译选项表内每个默认值为关闭的编译选项,当前示例为NGX_HTTP_REALIP,NGX_HTTP_HEADERS,NGX_HTTP_DAV三个编译选项。
动态库名称命名规则为:Nginx发行版名称+Nginx内核版本号+Nginx编译选项编译签名值的第29位到31位,对应编译选项开启时为1,关闭时为0。
编译对照表生成:对筛选后的编译选项循环组合,共有:全无,NGX_HTTP_REALIP,NGX_HTTP_HEADERS,NGX_HTTP_DAV,NGX_HTTP_REALIP+NGX_HTTP_HEADERS,NGX_HTTP_HEADERS+NGX_HTTP_DAV,NGX_HTTP_REALIP+NGX_HTTP_DAV,NGX_HTTP_REALIP+NGX_HTTP_HEADERS+NGX_HTTP_DAV八种组合,每个编译选项组合和Nginx版本差异表内每个Nginx版本生成一个按照动态库名称命名规则确定名称的动态库。
加载对照表生成规则为:筛选出Nginx版本差异表内每组相邻的Nginx版本之间的所有版本,同组内所有Nginx版本均可以加载组内最低版本的动态库。
加载对照表的编译签名组合获取规则:截取Nginx编译选项表内NGX_HTTP_REALIP,NGX_HTTP_HEADERS,NGX_HTTP_DAV编译选项所在的编译选项签名第29位到31位的字符串。
编译对照表(21):
Figure DA00033426533457124043
Figure BDA0003342653340000091
Figure BDA0003342653340000101
加载对照表(22):
Figure BDA0003342653340000102
Figure BDA0003342653340000111
Figure BDA0003342653340000112
(3)按照编译对照表格将功能模块编译为多个so动态库。循环对照表内Nginx 6个版本和8个编译选项组合,将功能模块编译为48个so动态库。
(4)利用PRE_LOAD及hook机制,在Nginx进程加载功能模块时拦截ngx_conf_parse函数,在此函数回调函数内,获取当前Nginx进程的发行版名称、当前Nginx进程的内核版本和当前Nginx进程的编译选项签名,截取编译选项签名第29位到31位的字符串,然后利用步骤(2)内生成的加载对照表(22)规则,从48个so动态库种选择被加载的动态库,并修改动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配,最后调用Nginx自带的load_module函数加载动态库。
最终,本方案将实际环境中68个版本34种编译选项最大可能68*2^34种情况的扩展模块精简为48个so动态库,并实现了按需动态加载,降低编译模块的次数,减少模块的存储占用空间,降低产品的部署难度。
本发明实施例还提供了一种动态适应及加载预编译的Nginx模块的系统,包括:
差异获取模块,用于获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
编译模块,用于根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格,其中,构造编译对照表和加载该编译对照表内的动态库名称命名规则需保持一致;并按照编译对照表格将Nginx功能模块编译为多个so动态库;
匹配模块,用于利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
该系统用于实施前述的动态适应及加载预编译的Nginx模块的方法,适用上述任一种动态适应及加载预编译的Nginx模块的方法,在此不再赘述。
请参阅图2为本发明实施例提供的电子设备的实施例示意图。如图2所示,本发明实施例提了一种电子设备,包括存储器1310、处理器1320及存储在存储器1310上并可在处理器1320上运行的计算机程序1311,处理器1320执行计算机程序1311时实现以下步骤:步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
步骤2,根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格,其中,构造编译对照表和加载该编译对照表内的动态库名称命名规则需保持一致;
步骤3,按照编译对照表格将Nginx功能模块编译为多个so动态库;
步骤4,利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
请参阅图3为本发明提供的一种计算机可读存储介质的实施例示意图。如图3所示,本实施例提供了一种计算机可读存储介质1400,其上存储有计算机程序1411,该计算机程序1411被处理器执行时实现如下步骤:步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
步骤2,根据版本差异及编译选项差异构造编译对照表格,并加载所述编译对照表格,其中,构造编译对照表和加载该编译对照表内的动态库名称命名规则需保持一致;
步骤3,按照编译对照表格将Nginx功能模块编译为多个so动态库;
步骤4,利用PRE_LOAD及hook机制,在Nginx进程启动时拦截版本比较函数,以绕过版本比较环节,并根据编译对照表格匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
有益效果:
利用构造编译对照表格及加载对照表格的方法和动态加载预编译模块的方法,动态适应不同环境的Nginx版本及编译选项,避免了在不同环境下的手工编译模块的复杂性,降低编译模块的次数,减少模块的存储占用空间,降低产品的部署难度。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种动态适应及加载预编译的Nginx模块的方法,其特征在于,所述方法包括:
步骤1,获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
具体地,使用统一的表格记录并管理其中的差异;
其中,功能模块涉及的Nginx内核结构表包含涉及的头文件名称、涉及的结构名称及涉及的结构字段;
Nginx内核结构变更表包含头文件名称、Nginx版本及变更的结构名称;
功能模块涉及的Nginx版本差异表包含Nginx版本、变更的结构名称及兼容的Nginx版本列表;
功能模块涉及的Nginx编译选项表包含涉及的编译选项、编译选项默认值及编译选项签名位置;
步骤2,根据版本差异及编译选项差异构造编译对照表及加载对照表,其中,构造编译对照表和加载对照表内的动态库名称命名规则需保持一致;
其中,编译对照表生成规则为:筛选出Nginx编译选项表内每个默认值为关闭的编译选项,然后对筛选后的选项循环组合,每个编译选项组合和Nginx版本差异表内每个Nginx版本生成一个按照动态库名称命名规则确定名称的动态库;
加载对照表生成规则为:筛选出Nginx版本差异表内每组相邻的Nginx版本之间的所有版本,同组内所有Nginx版本均可以加载组内最低版本的动态库;
步骤3,按照编译对照表将Nginx功能模块编译为多个so动态库;
步骤4,利用PRE_LOAD及hook机制,在Nginx进程加载功能模块时拦截版本比较函数,以绕过版本比较环节,并根据加载对照表匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
2.根据权利要求1所述的动态适应及加载预编译的Nginx模块的方法,其特征在于,所述动态库名称命名规则为:Nginx发行版名称+Nginx内核版本号+Nginx编译选项表内默认值为关闭的编译选项编译签名值组合。
3.根据权利要求1所述的动态适应及加载预编译的Nginx模块的方法,其特征在于,所述步骤3具体包括:利用步骤2内生成的编译对照表编写编译脚本,循环对照表内所有的Nginx发行版版本和编译选项组合,将功能模块编译为按照动态库名称命名规则的多个so动态库。
4.根据权利要求1所述的动态适应及加载预编译的Nginx模块的方法,其特征在于,所述步骤4具体包括:利用PRE_LOAD及hook机制,在Nginx进程加载功能模块时拦截版本比较函数,获取当前Nginx进程的发行版名称、当前Nginx进程的内核版本和当前Nginx进程的编译选项签名,然后利用步骤2内生成的加载对照表规则,确定被加载的动态库名称,并修改动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配,最后调用Nginx自带的load_module函数加载动态库。
5.一种动态适应及加载预编译的Nginx模块的系统,其特征在于,包括:
差异获取模块,用于获取Nginx功能模块涉及的Nginx内核结构,并根据涉及的Nginx内核结构获取版本差异以及Nginx功能模块涉及的编译选项差异;
具体地,使用统一的表格记录并管理其中的差异;
其中,功能模块涉及的Nginx内核结构表包含涉及的头文件名称、涉及的结构名称及涉及的结构字段;
Nginx内核结构变更表包含头文件名称、Nginx版本及变更的结构名称;
功能模块涉及的Nginx版本差异表包含Nginx版本、变更的结构名称及兼容的Nginx版本列表;
功能模块涉及的Nginx编译选项表包含涉及的编译选项、编译选项默认值及编译选项签名位置;
编译模块,用于根据版本差异及编译选项差异构造编译对照表及加载对照表,其中,构造编译对照表和及加载对照表内的动态库名称命名规则需保持一致;并按照编译对照表将Nginx功能模块编译为多个so动态库;
其中,编译对照表生成规则为:筛选出Nginx编译选项表内每个默认值为关闭的编译选项,然后对筛选后的选项循环组合,每个编译选项组合和Nginx版本差异表内每个Nginx版本生成一个按照动态库名称命名规则确定名称的动态库;
加载对照表生成规则为:筛选出Nginx版本差异表内每组相邻的Nginx版本之间的所有版本,同组内所有Nginx版本均可以加载组内最低版本的动态库;
匹配模块,用于利用PRE_LOAD及hook机制,在Nginx进程加载功能模块时拦截版本比较函数,以绕过版本比较环节,并根据加载对照表匹配相应的功能模块so动态库,修改so动态库内储存的版本常量及编译选项签名常量,使之与当前Nginx进程的常量匹配。
6.一种电子设备,其特征在于,包括存储器、处理器,所述处理器用于执行存储器中存储的计算机管理类程序时实现如权利要求1-4任一项所述的动态适应及加载预编译的Nginx模块的方法的步骤。
7.一种计算机可读存储介质,其特征在于,其上存储有计算机管理类程序,所述计算机管理类程序被处理器执行时实现如权利要求1-4任一项所述的动态适应及加载预编译的Nginx模块的方法的步骤。
CN202111313350.XA 2021-11-08 2021-11-08 一种动态适应及加载预编译的Nginx模块的方法及系统 Active CN114237609B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111313350.XA CN114237609B (zh) 2021-11-08 2021-11-08 一种动态适应及加载预编译的Nginx模块的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111313350.XA CN114237609B (zh) 2021-11-08 2021-11-08 一种动态适应及加载预编译的Nginx模块的方法及系统

Publications (2)

Publication Number Publication Date
CN114237609A CN114237609A (zh) 2022-03-25
CN114237609B true CN114237609B (zh) 2022-11-22

Family

ID=80748586

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111313350.XA Active CN114237609B (zh) 2021-11-08 2021-11-08 一种动态适应及加载预编译的Nginx模块的方法及系统

Country Status (1)

Country Link
CN (1) CN114237609B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530225A (zh) * 2013-09-10 2014-01-22 武汉烽火网络有限责任公司 自动化编译测试方法及实现该方法的自动化编译测试平台
CN104572235A (zh) * 2014-12-31 2015-04-29 北京奇虎科技有限公司 一种可加载内核模块的编译方法和装置
CN106959870A (zh) * 2017-02-20 2017-07-18 北京数字联盟网络科技有限公司 Nginx动态模块加载方法和装置
CN111596970A (zh) * 2020-05-12 2020-08-28 广州市百果园信息技术有限公司 动态库延迟加载方法、装置、设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103023939B (zh) * 2011-09-26 2017-10-20 中兴通讯股份有限公司 在Nginx上实现云缓存的REST接口的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530225A (zh) * 2013-09-10 2014-01-22 武汉烽火网络有限责任公司 自动化编译测试方法及实现该方法的自动化编译测试平台
CN104572235A (zh) * 2014-12-31 2015-04-29 北京奇虎科技有限公司 一种可加载内核模块的编译方法和装置
CN106959870A (zh) * 2017-02-20 2017-07-18 北京数字联盟网络科技有限公司 Nginx动态模块加载方法和装置
CN111596970A (zh) * 2020-05-12 2020-08-28 广州市百果园信息技术有限公司 动态库延迟加载方法、装置、设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Nginx服务器"秘籍";刘旻昊;《中国传媒科技》;20180415;第13-14页 *

Also Published As

Publication number Publication date
CN114237609A (zh) 2022-03-25

Similar Documents

Publication Publication Date Title
US9906622B2 (en) Automated service interface optimization
KR101143027B1 (ko) 자기 기술적 소프트웨어 이미지 업데이트 컴포넌트
US7665080B2 (en) System and method for using a classloader hierarchy to load software applications
US20030200350A1 (en) Class dependency graph-based class loading and reloading
US20060020937A1 (en) System and method for extraction and creation of application meta-information within a software application repository
CN111475227B (zh) 业务插件加载实现方法、装置和终端设备
US8418161B2 (en) System and method for loading a called class file table with data indicating a highest version of a class file
US8196128B2 (en) System and method for providing a filtering classloader in a computer environment
CN103677937B (zh) 升级软件和运行软件的方法及装置
US20050108628A1 (en) System and method for generating optimized binary representation of an object tree
CN110244990A (zh) 应用组件调用方法、装置、电子设备及存储介质
EP3866443A1 (en) Opc ua server, system operating using opc ua, and method of executing opc ua system
US8185888B2 (en) Software execution with minimal impact deployment
US20080141219A1 (en) Multiple inheritance facility for java script language
CN103647811A (zh) 一种实现应用访问后台服务的方法和装置
US20080065664A1 (en) Computer-implemented method, tool, and program product for more efficiently utilizing java resource bundles
CN114237609B (zh) 一种动态适应及加载预编译的Nginx模块的方法及系统
US9767216B2 (en) Method and system for capturing and applying changes to a data structure
CN112905263A (zh) 一种自定义组件的加载方法、装置、电子设备和存储介质
CN111966744B (zh) 工作流部署方法、装置、计算机设备和存储介质
US20090172648A1 (en) Byte code analysis library
CN110275710B (zh) 一种Java本地接口一致性检查方法及系统、存储介质及终端
CN112199080A (zh) vuejs项目webpack构建方法及设备
CN111858487A (zh) 数据更新方法及设备
CN111045748B (zh) 快速读取配置文件的方法及系统、服务器及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant