NGINX Lua モジュールをインストールする

NGINX Lua モジュールは、NGINX 用の OpenResty の Lua モジュール (通常は ngx_http_lua_module と呼ばれる) を活用しており、 NGINX 設定に Lua コードを直接埋め込むことができます。このモジュールは Lua スクリプト言語で書かれており、NGINX オープンソース、NGINX Plus、および OpenResty と統合できます。

ヒント : Lua のサポートがホスティング環境の要件に含まれていない場合は、NGINX Lua モジュールの代わりに NGINX 動的モジュールをインストールすることをお勧めします。NGINX 動的モジュールは依存関係が少なくなっています。

前提条件

NGINX Lua モジュールをインストールする前に、NGINX インストールを Lua サポートでコンパイルするか、OpenResty Lua モジュール経由でロードしなければなりません。Lua の追加方法を決める際には、次の点に注意してください。

  • Lua モジュールの可用性はディストリビューションとベンダーによって異なるため、OpenResty を使用するか、適切な Lua の依存関係とモジュールを提供するディストリビューションとサードパーティのリポジトリを使用することをお勧めします。

  • 2019年5月時点で、OpenResty の Lua モジュールには resty.core が必要です。この変更に伴い、特定の NGINX パッケージメンテナーは NGINX 用の Lua パッケージ (例 : Ubuntu 22.04以降) の提供を停止し、特定のパッケージには Lua が含まれなくなる可能性があります (例 : nginx-full または nginx-extras)。

  • 2019年9月以降、Lua モジュール (nginx-module-lua) の新バージョンのリリースは停止されました。このモジュールに依存する既存のインストールは、モジュールのサポート期間が終了するまでサポートされます。

Lua を追加したら、正しくロードされていることを確認します。

パッケージリポジトリを追加する

前提条件を完了したら、リポジトリからプルするようにパッケージ管理システムを設定します。

Alpine Linux

使用したい Alpine Linux パッケージリポジトリのバージョンを追加します。

  1. Alpine Linux 3.23
$ echo '[sigsci_release]
name=sigsci_release
baseurl=https://apk.security.fastly.com/release/amazon/2023/noarch
gpgcheck=1
repo_gpgcheck=1
enabled=1
gpgkey=https://yum.security.fastly.com/release/gpgkey https://dl.security.fastly.com/sigsci-agent/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt' | sudo tee /etc/yum.repos.d/sigsci.repo

Amazon Linux

使用したい Amazon Linux パッケージリポジトリのバージョンを追加します。

注 : これらの指示に従うと、パッケージマネージャーが https://yum.security.fastly.com からプルするように設定できます。同じパッケージリポジトリは https://yum.signalsciences.net にもあります。パッケージマネージャーを https://yum.signalsciences.net からプルするように設定するには、関連するコードサンプル内の security.fastly.com のすべてのインスタンスを signalsciences.net に置き換えてください。

  1. Amazon Linux 2023
  2. Amazon Linux 2
$ echo '[sigsci_release]
name=sigsci_release
baseurl=https://yum.security.fastly.com/release/amazon/2023/noarch
gpgcheck=1
repo_gpgcheck=1
enabled=1
gpgkey=https://yum.security.fastly.com/release/gpgkey https://dl.security.fastly.com/sigsci-agent/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt' | sudo tee /etc/yum.repos.d/sigsci.repo

Debian

使用したい Debian パッケージリポジトリのバージョンを追加します。

注 : これらの指示に従うと、パッケージマネージャーが https://apt.security.fastly.com からプルするように設定できます。同じパッケージリポジトリは https://apt.signalsciences.net にあります。パッケージマネージャーを https://apt.signalsciences.net からプルするように設定するには、関連するコードサンプル内の security.fastly.com のすべてのインスタンスを signalsciences.net に置き換えてください。

  1. Bullseye (11) 以上
  2. Buster (10) 以下
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https wget gnupg lsb-release
$ sudo wget -qO - https://apt.security.fastly.com/release/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/sigsci.gpg
$ sudo echo "deb [signed-by=/usr/share/keyrings/sigsci.gpg] https://apt.security.fastly.com/release/debian/ `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/sigsci-release.list
$ sudo apt-get update

RHEL と派生製品

次のコマンドは、Red Hat Enterprise Linux (RHEL) とその派生製品 (例 : CentOS) に適用されます。タブ名は RHEL のベースソースバージョンを示しています。

注 : これらの指示に従うと、パッケージマネージャーが https://yum.security.fastly.com からプルするように設定できます。同じパッケージリポジトリは https://yum.signalsciences.net にもあります。パッケージマネージャーを https://yum.signalsciences.net からプルするように設定するには、関連するコードサンプル内の security.fastly.com のすべてのインスタンスを signalsciences.net に置き換えてください。

  1. RHEL 10
  2. RHEL 9
  3. RHEL 8
  4. RHEL 7
$ sudo tee /etc/yum.repos.d/sigsci.repo <<-'EOF'
[sigsci_release]
name=sigsci_release
baseurl=https://yum.security.fastly.com/release/el/$releasever/noarch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://yum.security.fastly.com/release/gpgkey https://dl.security.fastly.com/sigsci-agent/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

Ubuntu

使用したい Ubuntu パッケージリポジトリのバージョンを追加します。

注 : これらの指示に従うと、パッケージマネージャーが https://apt.security.fastly.com からプルするように設定できます。同じパッケージリポジトリは https://apt.signalsciences.net にあります。パッケージマネージャーを https://apt.signalsciences.net からプルするように設定するには、関連するコードサンプル内の security.fastly.com のすべてのインスタンスを signalsciences.net に置き換えてください。

  1. リリース 22.04+
  2. リリース 20.04 以前
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https wget gnupg lsb-release
$ wget -qO - https://apt.security.fastly.com/release/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/sigsci.gpg
$ sudo echo "deb [signed-by=/usr/share/keyrings/sigsci.gpg] https://apt.security.fastly.com/release/ubuntu/ `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/sigsci-release.list
$ sudo apt-get update

NGINX Lua モジュールをインストールする

パッケージ管理システムをリポジトリからプルするように設定したら、NGINX Lua モジュールを次の手順でインストールします。

  1. ディストリビューションに適したモジュールパッケージをインストールします。

    1. Debian / Ubuntu
    2. RHEL / CentOS / Amazon
    $ sudo apt install sigsci-module-nginx
  2. NGINX の設定ファイル (デフォルトでは /etc/nginx/nginx.confにある) の関連する NGINX server コンテキストに次の行を追加します。

    include "/opt/sigsci/nginx/sigsci.conf";
  3. NGINX サービスを再起動して、新しいモジュールを初期化します。

    • systemdベースのシステム :

      $ sudo systemctl restart nginx
    • upstartベースのシステム :

      $ sudo restart nginx
    • init システムまたはサービスファイルなし :

      $ sudo nginx -s reload

Lua が正しくロードされているか確認する

NGINX Lua モジュールをインストールした後、Lua が動作していること、および NGINX Lua モジュールが正しく実行されていることを確認します。

  1. 次のスクリプトを実行して、次のファイルをインストールディレクトリに追加します。

    cat <<'EOF' >/opt/sigsci/nginx/sigsci_check_lua.conf
    # If you installed Lua as a dynamic module, uncomment the following load_module directives. This is not required if using openresty.
    # load_module modules/ndk_http_module.so;
    # load_module modules/ngx_http_lua_module.so;
    events {
    worker_connections 768;
    # multi_accept on;
    }
    http {
    init_by_lua '
    local m = {}
    local ngx_lua_version = "dev"
    if ngx then
    -- if not in testing environment
    ngx_lua_version = tostring(ngx.config.ngx_lua_version)
    ngx.log(ngx.STDERR, "INFO:", " Check for jit: lua version: ", ngx_lua_version)
    end
    local r, jit = pcall(require, "jit")
    if not r then
    error("ERROR: No lua jit support: No support for NGWAF Lua module")
    else
    if jit then
    m._SERVER_FLAVOR = ngx_lua_version .. ", lua=" .. jit.version
    if os.getenv("SIGSCI_NGINX_DISABLE_JIT") == "true" then
    nginx.log(ngx.STDERR, "WARNING:", "Disabling lua jit because env var: SIGSCI_NGINX_DISABLE_JIT=", "true")
    end
    ngx.log(ngx.STDERR, "INFO:", " Bravo! You have lua jit support=", m._SERVER_FLAVOR)
    else
    error("ERROR: No luajit support: No support for NGWAF module")
    end
    end
    ';
    }
    EOF
  2. 次のコマンドを実行して、Lua が正しくロードされているかテストします。

    $ nginx -t -c /opt/sigsci/nginx/sigsci_check_lua.conf

    出力は次のようになります。

    nginx: [] [lua] init_by_lua:9: INFO: Check for jit: lua version: 10000
    nginx: [] [lua] init_by_lua:22: INFO: Bravo! You have lua jit support=10000, lua=LuaJIT 2.0.4
    nginx: the configuration file <your explicit path>/sigsci_check_lua.conf syntax is ok
    nginx: configuration file <your explicit path>/sigsci_check_lua.conf test is successful

NGINX で複数の Lua スクリプトを使用する

NGINX は、NGINX Lua モジュールで使用される1つの init_by_lua または init_by_lua_file をサポートしています。NGINX 内に独自の Lua スクリプトが埋め込まれている場合は、NGINX Lua モジュールをカスタム Lua コードに組み込む必要があります。

ヒント : sigsci.conf 設定ファイルを使用しない場合、NGINX Lua モジュールがアップグレードされるときに設定ファイルが更新されないため、Lua モジュールを確認する必要があります。

既存の Lua コードに NGINX Lua モジュールを追加するには、以下の手順に従います。

  1. NGINX 設定から sigsci のリファレンスをすべて削除します。リファレンスは次のようなものです。

    include /opt/sigsci/nginx/sigsci.conf;
  2. NGINX の設定に以下の行を追加します。

    lua_shared_dict sigsci_conf 12k;
    lua_use_default_type off;
  3. init_by_lua または init_by_lua_file で指定されたファイルに、次のスニペットを含めます。

    package.path = "/opt/sigsci/nginx/?.lua;" .. package.path
    sigsci = require("SignalSciences")
  4. NGINXの設定に access_by_lualog_by_lua を追加します。これらのディレクティブがすでに定義されている場合は、sigsci.prerequest() および sigsci.postrequest() ステートメントをそれぞれの Lua の呼び出し元にコピーします。

    access_by_lua 'sigsci.prerequest()';
    log_by_lua 'sigsci.postrequest()';
  5. NGINXを再起動してください。