ホームページ >運用・保守 >Nginx >Nginx の動的モジュール読み込み設定を実装する方法

Nginx の動的モジュール読み込み設定を実装する方法

WBOY
WBOYオリジナル
2023-11-08 14:23:121734ブラウズ

Nginx の動的モジュール読み込み設定を実装する方法

Nginx は、高性能 Web サーバーおよびリバース プロキシ ソフトウェアであり、最近リリースされた Nginx バージョン 1.9.11 以降では、動的モジュールの読み込みがサポートされています。この新機能により、ユーザーは Nginx を再コンパイルして再インストールすることなく、新しい動的モジュールを追加することで機能を拡張およびカスタマイズできます。この記事では、Nginx で動的モジュール読み込み構成を実装する方法と具体的なコード例を紹介します。

Nginx の動的モジュールの読み込みの原則は、新しいコンパイル モード (「--add-dynamic-module=module_path」) を通じて動的モジュールのサポートを有効にすることです。このコンパイル モードを使用すると、コンパイルによってダイナミック リンク ライブラリ (.so) ファイルが生成されます。このダイナミック リンク ライブラリは、Nginx の起動および実行時に動的にロードおよびアンロードできます。静的モジュールと比較して、動的モジュールは柔軟性に優れています。

具体的な実装方法は以下のとおりです:

1. 動的モジュールのソースコードを記述します

Header ヘッダーを追加する実装を例に挙げます。 Webアプリケーション内のリクエストやレスポンスヘッダーに、Nginx自体はHeaderヘッダーを追加する機能を提供していませんが、カスタムモジュールを通じて実現できます。次のコードは、Header ヘッダーを追加する簡単な例です:

#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
};

このコードは、Nginx カスタム モジュール ngx_http_add_header_module を実装します。このカスタム モジュールには、ngx_http_add_header_handler と ngx_http_add_header_init という 2 つの関数があります。前者は、Header ヘッダーの実装に使用されます。モジュールの初期化に使用される特定のロジック。各モジュールは、モジュール コンテキスト ngx_http_add_header_module_ctx と、モジュールのバージョン番号、コンテキスト、その他の情報を含む ngx_module_t 構造変数 ngx_http_add_header_module を定義する必要があります。

2. ダイナミック リンク ライブラリをコンパイルして生成する

次のコマンドを使用してコードをコンパイルし、ダイナミック リンク ライブラリを生成します:

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

上記のコマンドを実行すると、ダイナミック リンク ライブラリが作成されます。 Nginx の HTTP モジュールの下の my_module ディレクトリには、ダイナミック モジュールの構築に使用される Makefile と、必要なソース コードおよびヘッダー ファイルが含まれており、生成されたダイナミック リンク ライブラリ ファイル (.so) は、objs/ ディレクトリにあります。

3. ダイナミック モジュールをロードする

次のコードを Nginx 設定ファイル nginx.conf に追加して、ダイナミック リンク ライブラリをロードします:

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;
        }
    }
}

http module ngx_http_add_header_module.so ダイナミック リンク ライブラリ ファイルを作成し、サーバー ブロックを定義し、サーバー ブロック内の場所構成アイテムを指定して Header ヘッダーを追加します。

4. Nginx のリロード

次のコマンドを実行して Nginx サーバーをリロードします:

nginx -s reload

このコマンドは、設定のリロード、Nginx の再起動、Nginx のシャットダウン、およびその他の操作を行うことができます。

この時点で、Nginx での動的モジュール読み込み構成の実装プロセスは完了です。

要約:

上記の紹介を通じて、Nginx 1.9.11 以降のバージョンでの動的モジュール読み込みの実装方法を簡単に理解できます。実装プロセスでは、ダイナミック モジュールのソース コードを記述し、ダイナミック リンク ライブラリをコンパイルして生成し、モジュール ライブラリをロードし、Nginx をリロードする必要があります。動的モジュールを使用すると、ユーザーはリリース後の段階で特定の機能を開発できるため、製品の発売がより迅速かつ柔軟になります。

以上がNginx の動的モジュール読み込み設定を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。