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 является зависимостью, вам нужно сделать следующее:
- скачать исходный код (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, который вы хотите использовать (вам нужно будет включить auto/have несколько раз, если вы хотите использовать несколько модулей NDK).
Примечание: старый метод установки
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
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-ndk.