Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So implementieren Sie die dynamische Modulladekonfiguration von Nginx

So implementieren Sie die dynamische Modulladekonfiguration von Nginx

WBOY
WBOYOriginal
2023-11-08 14:23:121471Durchsuche

So implementieren Sie die dynamische Modulladekonfiguration von Nginx

Nginx ist eine leistungsstarke Webserver- und Reverse-Proxy-Software. Die kürzlich veröffentlichte Nginx-Version 1.9.11 und spätere Versionen unterstützen das Laden dynamischer Module. Mit dieser neuen Funktion können Benutzer die Funktionalität erweitern und anpassen, indem sie neue dynamische Module hinzufügen, ohne Nginx neu kompilieren und installieren zu müssen. In diesem Artikel wird die Implementierung der dynamischen Modulladekonfiguration in Nginx vorgestellt und spezifische Codebeispiele gegeben.

Das Prinzip des dynamischen Ladens von Nginx-Modulen besteht darin, die Unterstützung für dynamische Module durch einen neuen Kompilierungsmodus zu aktivieren – „--add-dynamic-module=module_path“. Bei Verwendung dieses Kompilierungsmodus generiert die Kompilierung eine Dynamic Link Library (.so)-Datei. Diese Dynamic Link Library kann dynamisch geladen und entladen werden, wenn Nginx gestartet und ausgeführt wird. Im Vergleich zu statischen Modulen weisen dynamische Module eine bessere Flexibilität auf.

Das Folgende ist die spezifische Implementierungsmethode:

1. Schreiben Sie den Quellcode des dynamischen Moduls.

Nehmen Sie die Implementierung des Hinzufügens von Header-Headern als Beispiel für die Header von Anfragen und Antworten in Webanwendungen Bietet keine Funktion zum Hinzufügen von Headern, kann aber über benutzerdefinierte Module implementiert werden. Der folgende Code ist ein einfaches Beispiel für das Hinzufügen eines Header-Headers:

#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

static ngx_int_t ngx_http_add_header_handler(ngx_http_request_t *r) {
    ngx_table_elt_t *h;
    h = ngx_list_push(&r->headers_out.headers);
    h->hash = 1;
    ngx_str_set(&h->key, "MyHeader");
    ngx_str_set(&h->value, "Hello Nginx!");
    r->headers_out.content_length_n = sizeof("Hello Nginx!") - 1;
    ngx_http_clear_content_length(r);
    ngx_http_header_filter(r);
    ngx_http_send_header(r);
    return NGX_OK;
}

static ngx_int_t ngx_http_add_header_init(ngx_conf_t *cf) {
    ngx_http_handler_pt *h;
    ngx_http_core_main_conf_t *cmcf;
    cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
    h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
    if(h == NULL) {
        return NGX_ERROR;
    }
    *h = ngx_http_add_header_handler;
    return NGX_OK;
}

static ngx_http_module_t ngx_http_add_header_module_ctx = {
    NULL, ngx_http_add_header_init, NULL, NULL, NULL, NULL, NULL, NULL
};

ngx_module_t ngx_http_add_header_module = {
    NGX_MODULE_V1, &ngx_http_add_header_module_ctx, NULL, NGX_HTTP_MODULE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NGX_MODULE_V1_PADDING
};

Dieser Code implementiert das benutzerdefinierte Nginx-Modul ngx_http_add_header_module. Dieses benutzerdefinierte Modul verfügt über zwei Funktionen, ngx_http_add_header_handler und ngx_http_add_header_init. Letzteres wird zur Initialisierung des Moduls verwendet. Jedes Modul muss einen Modulkontext ngx_http_add_header_module_ctx und eine ngx_module_t-Strukturvariable ngx_http_add_header_module definieren, die die Versionsnummer, den Kontext und andere Informationen des Moduls enthält.

2. Kompilieren und generieren Sie die dynamische Linkbibliothek.

Verwenden Sie den folgenden Befehl, um den Code zum Generieren der dynamischen Linkbibliothek zu kompilieren:

./configure --prefix=/usr/local/nginx --add-dynamic-module=./src/http/modules/my_module && make && make install

Durch Ausführen des obigen Befehls wird das Verzeichnis my_module unter dem HTTP-Modul von Nginx erstellt, das die enthält Makefile, das zum Erstellen der dynamischen Moduldatei und einiger erforderlicher Quellcode- und Headerdateien verwendet wird. Die generierte Dynamic Link Library-Datei (.so) befindet sich im Verzeichnis objs/.

3. Dynamische Module laden

Fügen Sie den folgenden Code in die Nginx-Konfigurationsdatei nginx.conf ein, um die dynamische Linkbibliothek zu laden:

load_module modules/ngx_http_add_header_module.so;

http {
    server {
        listen 80;
        server_name myweb.com;
        location / {
            add_header MyHeader "Hello Nginx!";
            root /var/www/html;
        }
    }
}

Laden Sie die dynamische Linkbibliotheksdatei ngx_http_add_header_module.so über den Befehl „load_module“ unter dem http-Modul und Definieren Sie dann einen Serverblock und geben Sie das Standortkonfigurationselement im Serverblock an, um den Header-Header hinzuzufügen.

4. Nginx neu laden

Führen Sie den folgenden Befehl aus, um den Nginx-Server neu zu laden:

nginx -s reload

Dieser Befehl kann die Konfiguration neu laden, Nginx neu starten, Nginx herunterfahren und andere Vorgänge ausführen.

An diesem Punkt ist der Prozess der Implementierung der dynamischen Modulladekonfiguration in Nginx abgeschlossen.

Zusammenfassung:

Durch die obige Einführung können wir die Implementierungsmethode für das dynamische Laden von Modulen in Nginx 1.9.11 und späteren Versionen kurz verstehen. Während des Implementierungsprozesses müssen Sie den Quellcode des dynamischen Moduls schreiben, die dynamische Linkbibliothek kompilieren und generieren, die Modulbibliothek laden und Nginx der Reihe nach neu laden. Durch die Verwendung dynamischer Module können Benutzer eine bestimmte Funktion in der Post-Release-Phase entwickeln und so die Produkteinführung schneller und flexibler gestalten.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die dynamische Modulladekonfiguration von Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn