跳转至

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 是一个依赖项,您需要执行以下操作:

  1. 下载源代码 (https://github.com/simpl/ngx_devel_kit)
  2. 解压源代码 (tar -xzf $name)
  3. 使用以下额外选项编译 Nginx --add-module=/path/to/ngx_devel_kit

例如:

./configure --add-module=/path/to/ngx_devel_kit \
            --add-module=/path/to/another/module

开发人员使用

要在您自己的模块中使用 NDK,您需要添加以下内容:

  1. 在您的模块中添加这一行
#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。

如果您希望将您的模块添加到此列表中,请告诉我们。

特别感谢

特别感谢 Yichun Zhang 帮助维护此模块。

GitHub

您可以在 nginx-module-ndk 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。