跳转至

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

  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 仓库 中找到有关此模块的其他配置提示和文档。