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.5,于 2026 年 7 月 17 日发布。
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 仓库 中找到有关此模块的其他配置提示和文档。