ndk: Nginx Development Kit
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ndk_http_module.so;
Dieses Dokument beschreibt nginx-module-ndk v0.3.4, veröffentlicht am 20. Februar 2025.
Das NDK ist ein Nginx-Modul, das entwickelt wurde, um die Kernfunktionalität des hervorragenden Nginx-Webservers zu erweitern, sodass es als Grundlage für andere Nginx-Module verwendet werden kann.
Es bietet Funktionen und Makros, um allgemeine Aufgaben zu erledigen, für die derzeit kein generischer Code als Teil der Kernverteilung vorhanden ist. Das NDK selbst fügt nur wenige Funktionen hinzu, die aus der Sicht eines Benutzers sichtbar sind - es wurde lediglich entwickelt, um den Code zu reduzieren, den Nginx-Modulentwickler schreiben müssen.
Nginx-Modulentwickler, die eine der Funktionen im NDK verwenden möchten, sollten angeben, dass das NDK eine Abhängigkeit ihres Moduls ist und dass die Benutzer es ebenfalls kompilieren müssen, wenn sie ihre eigenen Module kompilieren. Sie müssen auch in ihren eigenen Modulen deklarieren, welche Funktionen des NDK sie verwenden möchten (siehe unten).
Wenn Sie kein Nginx-Modulentwickler sind, wird der einzige nützliche Teil dieses Projekts der Abschnitt „Nutzung für Benutzer“ unten sein.
Funktionen
- zusätzliche conf_set-Funktionen für Regex, komplexe/Skriptwerte, Pfade...
- Makros zur Vereinfachung von Aufgaben wie der Überprüfung auf NULL-Werte beim Durchführen von ngx_array_push
- Patches für den Hauptquellcode
- ngx_auto_lib_core generischer externer Bibliotheks-Handler ist enthalten (siehe separates README)
Design
modular
Das Kit selbst ist modular aufgebaut, sodass nur der benötigte Code kompiliert wird. Es ist möglich, nur ein einzelnes NDK-Modul, einige oder alle hinzuzufügen.
auto-generiert & leicht erweiterbar
Viele der im NDK verfügbaren Makros werden automatisch aus einfachen Konfigurationsdateien generiert. Dies macht es sehr einfach, ähnliche Makros für Ihren eigenen Code zu erstellen - es ist in der Regel nur eine zusätzliche Zeile in einer Konfigurationsdatei hinzuzufügen und das Build-Skript erneut auszuführen.
Nutzung für Benutzer
Wenn ein anderes Nginx-Modul, das Sie verwenden möchten, angibt, dass das NDK eine Abhängigkeit ist, müssen Sie Folgendes tun:
- den Quellcode herunterladen (https://github.com/simpl/ngx_devel_kit)
- den Quellcode entpacken (tar -xzf $name)
- Nginx mit der folgenden zusätzlichen Option kompilieren
--add-module=/path/to/ngx_devel_kit.
z.B.
./configure --add-module=/path/to/ngx_devel_kit \
--add-module=/path/to/another/module
Nutzung für Entwickler
Um das NDK in Ihrem eigenen Modul zu verwenden, müssen Sie Folgendes hinzufügen:
- fügen Sie diese Zeile zu Ihrem Modul hinzu
#include <ndk.h>
Hinweis: Da das NDK die folgenden Zeilen enthält
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
können Sie diese durch das oben genannte einzelne Include ersetzen. 2. fügen Sie die folgende Zeile in die Konfigurationsdatei für Ihr Modul ein:
have=NDK_[module_name] . auto/have
für jedes NDK-Modul, das Sie verwenden möchten (Sie müssen auto/have mehrfach einfügen, wenn Sie mehrere NDK-Module verwenden möchten).
Hinweis: Die alte Methode zur Einstellung
CFLAGS="$CFLAGS -DNDK_[module_name]"
ist jetzt veraltet. Sie funktioniert weiterhin, führt jedoch zu unnötigen Zeilen, die beim Kompilieren von Nginx angezeigt werden.
Warnung: Verwendung von NDK_ALL
Sie können auch NDK_ALL setzen, um alle NDK-Module einzuschließen. Dies dient hauptsächlich als Komfort in den frühen Entwicklungsphasen eines anderen Moduls. Allerdings,
LASSEN SIE NDK_ALL NICHT IN IHRER KONFIGURATIONSDATEI, WENN SIE VERÖFFENTLICHEN
Obwohl das NDK jetzt recht klein ist, könnte es im Laufe der Zeit ein großes Repository von Code werden, das, wenn NDK_ALL verwendet wird, dazu führen würde, dass erheblich mehr Code kompiliert wird, als notwendig ist.
Module, die NDK verwenden
Die folgenden 3rd-Party-Module nutzen das 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
Wenn Sie Ihr Modul zu dieser Liste hinzufügen möchten, lassen Sie es uns bitte wissen.
Besonderer Dank
Ein besonderer Dank geht an Yichun Zhang für die Unterstützung bei der Wartung dieses Moduls.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-ndk.