Editor – Der Blogbeitrag, der die ursprüngliche Veröffentlichung der Unterstützung dynamischer Module (in NGINX Open Source 1.9.11, Februar 2016) ankündigt, leitet hierher weiter. Der in diesem Beitrag beschriebene Build-Prozess ist veraltet.
Dieser Beitrag ist Teil einer zweiteiligen Reihe zur Verwendung dynamischer Module von Drittanbietern mit NGINX Open Source und NGINX Plus.
NGINX Open Source 1.11.5 und NGINX Plus Release R11 führten die Binärkompatibilität für dynamische Module ein. In diesem Artikel wird erläutert, wie Sie Module von Drittanbietern für die Verwendung mit NGINX Open Source und NGINX Plus in einer Entwicklungsumgebung kompilieren. Anweisungen zum Erstellen, Bereitstellen und Aktualisieren dynamischer Module von Drittanbietern in einer Produktionsumgebung finden Sie unter Erstellen installierbarer Pakete für dynamische Module .
Der Kürze halber bezieht sich der Rest dieses Beitrags nur auf NGINX Plus, außer wenn der Unterschied zwischen diesem und NGINX Open Source relevant ist. Sofern nicht anders angegeben, gelten alle Aussagen zu NGINX Plus auch für NGINX Open Source.
Module, die in NGINX Plus geladen werden können, sind in C geschrieben und entsprechen der in „Extending NGINX“ im NGINX-Wiki beschriebenen API. Es gibt ein großes Ökosystem an Modulen von Drittanbietern , von Sprachinterpreten bis zu Sicherheitslösungen, und einige davon sind in NGINX Plus enthalten und werden darin unterstützt .
Andere Module von Drittanbietern und Module, die Sie selbst erstellt haben, müssen unabhängig kompiliert und zur Laufzeit dynamisch in NGINX Plus geladen werden. Sie können diese Module für die Verwendung mit NGINX Plus kompilieren, indem Sie sie mit NGINX Open Source erstellen, wie in den beiden folgenden Beispielen dargestellt:
--with-compat
für den Konfigurationsbefehl
.Dieses Beispiel verwendet ein einfaches „Hello World“-Modul, um zu zeigen, wie die Quelle für ein Modul aktualisiert und in NGINX Plus geladen wird. Das Modul „Hallo Welt“ implementiert eine einfache Direktive ( hello_world
), die auf Anfragen mit einer einfachen Nachricht antwortet.
Bestimmen Sie die NGINX Open Source-Version, die Ihrer NGINX Plus-Installation entspricht. In diesem Beispiel ist es NGINX 1.11.5.
$ nginx -v nginx-Version: nginx/1.11.5 (nginx-plus-r11)
Laden Sie das entsprechende NGINX Open Source-Paket unter nginx.org/download herunter:
$ wget https://nginx.org/download/nginx-1.11.5.tar.gz $ tar -xzvf nginx-1.11.5.tar.gz
Besorgen Sie sich den Quellcode für das NGINX-Modul „Hello World“ von GitHub :
$ git clone https://github.com/perusio/nginx-hello-world-module.git
Die Konfigurations- Shell-Datei für ein Modul definiert, wie es erstellt wird, und ihr Format ist für dynamische Module anders als für Module, die statisch in eine NGINX Open Source-Binärdatei integriert werden.
Ändern Sie die Datei nginx-hello-world-module/config, sodass sie Folgendes enthält:
ngx_addon_name=ngx_http_hello_world_module
wenn test -n "$ngx_module_link"; dann
ngx_module_type=HTTP
ngx_module_name=ngx_http_hello_world_module
ngx_module_srcs="$ngx_addon_dir/ngx_http_hello_world_module.c"
. auto/module
sonst
HTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c"
fi
Ausführliche Informationen zum Kompilieren dynamischer Module, einschließlich Anweisungen zum Aktualisieren der Konfigurationsdatei eines Moduls vom alten Format, finden Sie im NGINX-Wiki .
Kompilieren Sie das Modul, indem Sie zuerst das Konfigurationsskript
mit dem Argument --with-compat
ausführen, wodurch eine standardmäßige Build-Umgebung erstellt wird, die sowohl von NGINX Open Source als auch von NGINX Plus unterstützt wird. Führen Sie dann make
module
aus, um das Modul zu erstellen:
$ cd nginx-1.11.5/ $ ./configure --with-compat --add-dynamic-module=../nginx-hello-world-module $ Module erstellen
Kopieren Sie die Modulbibliothek ( .so- Datei) nach /etc/nginx/modules :
$ sudo cp objs/ngx_http_hello_world_module.so /etc/nginx/modules/
Um das Modul in NGINX Plus zu laden, fügen Sie die Direktive load_module
im Kontext der obersten Ebene (Hauptkontext) Ihrer Konfigurationsdatei nginx.conf hinzu (nicht im HTTP-
oder Streamkontext
):
Lademodulmodule/ngx_http_hello_world_module.so;
Fügen Sie im HTTP-
Kontext einen Standortblock
mit der Direktive „hello_world“
hinzu, die vom Modul „Hello World“ bereitgestellt wird. Anfragen an den Standort geben die Antwort „Hallo
Welt“
zurück.
Server {
listen 80;
Standort / {
hallo_welt;
}
}
Laden Sie Ihre NGINX Plus-Konfiguration neu und testen Sie sie mit einer einfachen Anfrage:
$ nginx -s reload $ curl http://localhost/ hallo Welt
NAXSI ist eine benutzerfreundliche, leistungsstarke Web Application Firewall (WAF), die Heuristiken und ein Bewertungssystem verwendet, um verdächtige Anfragen wie XSS- und SQL-Injection-Angriffe zu identifizieren.
Die NAXSI-Quelle wurde aktualisiert, um dem neuen Format für die Konfigurations- Shell-Datei zu entsprechen. Daher ist das Erstellen eines dynamischen Moduls für NGINX Plus unkompliziert. Der Vorgang basiert auf den NAXSI-Installationsanweisungen :
$ git clone https://github.com/nbs-system/naxsi.git $ cd nginx-1.11.5/ $ ./configure --with-compat --add-dynamic-module=../naxsi/naxsi_src $ Module erstellen $ sudo cp objs/ngx_http_naxsi_module.so /etc/nginx/modules
Laden Sie das Modul in den NGINX Plus-Kern, indem Sie die Direktive load_module
zum Hauptkontext in Ihrer Datei nginx.conf hinzufügen:
lade_Modulmodule/ngx_http_naxsi_module.so;
Die NAXSI-Konfiguration wird in der Projektdokumentation ausführlich beschrieben. Die folgende NGINX-Konfiguration veranschaulicht das Modul in Aktion:
# Bearbeiten Sie diese 'include'-Anweisung, um auf Ihre Datei naxsi_core.rules zu verweisen
include /home/owen/src/naxsi/naxsi_config/naxsi_core.rules;
server {
listen 80;
location / {
root /usr/share/nginx/html;
# NAXSI aktivieren
SecRulesEnabled;
# Definieren Sie, wohin blockierte Anfragen gehen
DeniedUrl "/50x.html";
# CheckRules, die bestimmen, wann NAXSI Maßnahmen ergreifen muss
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
# Vergessen Sie nicht das error_log, in dem blockierte Anfragen protokolliert werden
error_log /tmp/naxsi.log;
}
error_page 500 502 503 504 /50x.html;
}
Sie können die korrekte Funktion von NAXSI mit ein paar einfachen HTTP-Anfragen überprüfen:
curl
http://localhost/
gibt die standardmäßige NGINX Plus-Indexseite zurück, die in /usr/share/nginx/html gespeichert ist.curl
"http://localhost/?a=<>"
löst die XSS-Erkennung von NAXSI aus und blockiert die Anforderung. Dadurch wird die Standardfehlerseite 50x.html von /usr/share/nginx/html zurückgegeben. Außerdem wird eine Meldung im error_log
protokolliert.Für Produktionsbereitstellungen können Sie auch signierte NAXSI-Versionen unter https://github.com/nbs-system/naxsi/tags herunterladen und auf ähnliche Weise kompilieren.
Notiz: Die Informationen in diesem Abschnitt gelten nur für NGINX Plus. Der Satz dynamischer Module, der mit vorgefertigten NGINX Open Source-Paketen geliefert wird, kann sich von denen unterscheiden, die mit NGINX Plus geliefert werden. Mit NGINX Open Source verwendete dynamische Module werden auf die gleiche Weise unterstützt wie der NGINX-Quellcode und vorgefertigte Binärdateien.
NGINX Plus wird mit einer Reihe dynamischer Module geliefert, die Sie auch direkt aus unserem Modul-Repository herunterladen können. Eine Liste finden Sie auf der Seite „Dynamische Module“ . Es gibt zwei Typen dieser Module:
Darüber hinaus zertifiziert NGINX Module von kommerziellen Anbietern, die an unserem NGINX Plus Certified Modules -Programm teilnehmen. Diese Module werden von ihren Anbietern vertrieben und unterstützt. Um eine Liste zu erhalten, filtern Sie auf der Seite „Dynamische Module“ nach dem Autor „Zertifizierter Partner“ .
NGINX testet oder unterstützt keine Module, die Sie selbst kompiliert haben (andere Community-Module, Module von Drittanbietern, die nicht Teil des NGINX Plus Certified Modules-Programms sind, und benutzerdefinierte Module). Wenn Sie wegen eines Problems technischen Support suchen, fordert Sie das NGINX-Supportteam im Rahmen unseres technischen Supportprozesses möglicherweise auf, ein nicht unterstütztes Modul zu entfernen und den Fehler zu reproduzieren, damit überprüft werden kann, ob der Fehler durch das nicht unterstützte Modul verursacht wird oder nicht.
Der dynamische Modul-Build-Prozess für NGINX Plus ermöglicht Ihnen, das breite Ökosystem der NGINX Open Source-Module zu nutzen und sie auf dem umfangreichen und vollständig unterstützten NGINX Plus-Kern auszuführen.
Wenn Sie derzeit NGINX Open Source mit Erweiterungen von Drittanbietern verwenden, können diese Erweiterungen höchstwahrscheinlich kompiliert und in NGINX Plus geladen werden.
Wenn Sie kommerzielle oder Community-Module entwickeln, können Ihre Benutzer Ihre Module dank des neuen Build-Prozesses mit NGINX Plus bereitstellen. Weitere Informationen zur Zertifizierung eines kommerziellen Moduls finden Sie unter NGINX Plus-zertifizierte Module .
Wenn Sie Hilfe bei der Entwicklung eines Moduls oder der Aktualisierung seiner Shell -Konfigurationsdatei benötigen, sehen Sie sich bitte die folgenden Ressourcen an:
Die Mailingliste der NGINX-Entwickler ist die Anlaufstelle für Community-Unterstützung und auch unser Professional Services-Team hilft Ihnen gerne weiter.
Um dynamische Module mit NGINX Plus selbst auszuprobieren, starten Sie noch heute eine kostenlose 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen .
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."