ndk: Nginx 开发工具包
安装
您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:
- RedHat Enterprise Linux 7、8、9 和 10
- CentOS 7、8、9
- AlmaLinux 8、9
- Rocky Linux 8、9
- Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-ndk
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-ndk
通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:
load_module modules/ndk_http_module.so;
本文档描述了 nginx-module-ndk v0.3.4,于 2025 年 2 月 20 日发布。
NDK 是一个 Nginx 模块,旨在扩展优秀的 Nginx Web 服务器的核心功能,以便可以作为其他 Nginx 模块的基础。
它具有处理当前核心发行版中没有的通用任务的函数和宏。NDK 本身从用户的角度来看增加的功能很少——它只是旨在帮助减少 Nginx 模块开发人员需要编写的代码。
希望使用 NDK 中任何功能的 Nginx 模块开发人员应指定 NDK 是其模块的依赖项,并且用户在编译自己的模块时也需要编译它。他们还需要在自己的模块中声明希望使用的 NDK 功能(见下文解释)。
如果您不是 Nginx 模块开发人员,那么该项目唯一有用的部分将是下面的“用户使用”部分。
特性
- 为正则表达式、复杂/脚本值、路径等提供额外的 conf_set 函数...
- 宏以简化在执行 ngx_array_push 时检查 NULL 值等任务
- 对主源代码的补丁
- 包含 ngx_auto_lib_core 通用外部库处理程序(请参见单独的自述文件)
设计
模块化
该工具包本身以模块化的方式设计,因此只编译所需的代码。可以仅添加一个 NDK 模块、几个或所有模块。
自动生成 & 易于扩展
NDK 中的许多宏是从简单的配置文件自动生成的。这使得为自己的代码创建类似的宏变得非常简单——通常只需在配置文件中添加一行并重新运行构建脚本即可。
用户使用
如果您希望使用的其他 Nginx 模块指定 NDK 是一个依赖项,您需要执行以下操作:
- 下载源代码(https://github.com/simpl/ngx_devel_kit)
- 解压源代码(tar -xzf $name)
- 使用以下额外选项编译 Nginx
--add-module=/path/to/ngx_devel_kit。
例如:
./configure --add-module=/path/to/ngx_devel_kit \
--add-module=/path/to/another/module
开发人员使用
要在自己的模块中使用 NDK,您需要添加以下内容:
- 在您的模块中添加这一行
#include <ndk.h>
注意:由于 NDK 包含以下行
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
您可以用上面的单个包含替换这些。 2. 在您的模块的配置文件中添加以下行:
have=NDK_[module_name] . auto/have
对于您希望使用的每个 NDK 模块(如果希望使用多个 NDK 模块,您需要多次包含 auto/have)。
注意:旧的设置方法
CFLAGS="$CFLAGS -DNDK_[module_name]"
现在已被弃用。它仍然可以工作,但在编译 Nginx 时会显示不必要的行。
警告:使用 NDK_ALL
您还可以设置 NDK_ALL 以包含所有 NDK 模块。这主要是为了方便在开发其他模块的早期阶段。然而,
在发布时请勿在您的配置文件中保留 NDK_ALL
尽管 NDK 现在相对较小,但随着时间的推移,它可能会成为一个大型代码库,如果使用 NDK_ALL,将会导致编译的代码比必要的多得多。
使用 NDK 的模块
以下第三方模块利用了 NDK。
- ngx_http_lua_module
- ngx_http_set_misc_module
- ngx_http_encrypted_session_module
- ngx_http_form_input_module
- ngx_http_iconv_module
- ngx_http_array_var_module
如果您希望将您的模块添加到此列表中,请告知我们。
特别感谢
特别感谢 Yichun Zhang 对维护此模块的帮助。
GitHub
您可以在 nginx-module-ndk 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。