Перейти к содержанию

ndk: Nginx Development Kit

Установка

Вы можете установить этот модуль в любой дистрибутив на базе 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, выпущенный 20 февраля 2025 года.


NDK — это модуль Nginx, который предназначен для расширения основной функциональности отличного веб-сервера Nginx таким образом, чтобы его можно было использовать в качестве основы для других модулей Nginx.

Он содержит функции и макросы для выполнения общих задач, для которых в данный момент нет универсального кода в основной дистрибуции. Сам NDK добавляет немного функций, которые видны с точки зрения пользователя — он просто предназначен для уменьшения объема кода, который разработчикам модулей Nginx необходимо писать.

Разработчики модулей Nginx, желающие использовать какие-либо функции NDK, должны указать, что NDK является зависимостью их модуля, и что пользователи также должны будут скомпилировать его, когда они компилируют свои собственные модули. Им также необходимо будет объявить в своих модулях, какие функции NDK они хотят использовать (объяснено ниже).

Если вы не являетесь разработчиком модуля Nginx, то единственной полезной частью этого проекта будет раздел «использование для пользователей» ниже.

Функции

  • дополнительные функции conf_set для регулярных выражений, сложных/скриптовых значений, путей...
  • макросы для упрощения задач, таких как проверка на NULL при выполнении ngx_array_push
  • патчи к основному исходному коду
  • включен универсальный обработчик внешних библиотек ngx_auto_lib_core (см. отдельный readme)

Дизайн

модульный

Сам комплект разработан модульным образом, так что компилируется только необходимый код. Можно добавить только один модуль 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, который вы хотите использовать (вам нужно будет включить auto/have несколько раз, если вы хотите использовать несколько модулей NDK).

Примечание: старый метод установки

CFLAGS="$CFLAGS -DNDK_[module_name]"

в настоящее время устарел. Он все еще будет работать, но приведет к отображению ненужных строк при компиляции Nginx.

Внимание: Использование NDK_ALL

Вы также можете установить NDK_ALL, чтобы включить все модули NDK. Это в первую очередь для удобства на ранних стадиях разработки другого модуля. Однако,

НЕ ОСТАВЛЯЙТЕ NDK_ALL В ВАШЕМ КОНФИГУРАЦИОННОМ ФАЙЛЕ ПРИ ПУБЛИКАЦИИ

Хотя NDK сейчас довольно мал, со временем он может стать большим репозиторием кода, который, если использовать NDK_ALL, приведет к значительному увеличению объема компилируемого кода, чем это необходимо.

Модули, использующие NDK

Следующие сторонние модули используют NDK.

Если вы хотите добавить свой модуль в этот список, пожалуйста, дайте нам знать.

Особая благодарность

Особая благодарность Yichun Zhang за помощь в поддержке этого модуля.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-ndk.