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

NGINX 動的モジュールはコンパイルされ、その後、NGINX バイナリ全体を再コンパイルすることなく、ランタイム時に NGINX に動的にロードされます。このモジュールは C 言語で書かれており、 NGINX オープンソースおよび NGINX Plus と統合できます。

重要 : NGINX 動的モジュールを使用するには、NGINX が --with-compat フラグでコンパイルされている必要があります。NGINX がそのフラグ付きでコンパイルされていない場合は、NGINX Lua モジュールを使用する必要があります。

モジュールをインストールするには、次の手順を実行します。

  1. パッケージリポジトリを追加します。

  2. モジュールをインストールします。

  3. モジュールをロードします。

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

NGINX の動的モジュールをインストールする前に、リポジトリからプルできるようにパッケージ管理システムを設定する必要があります。

Alpine Linux

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

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

$ apk update && apk add wget
$ wget -q https://apk.security.fastly.com/sigsci_apk.pub ; mv sigsci_apk.pub /etc/apk/keys
$ echo https://apk.security.fastly.com/$(grep -oE '[0-9]+\.[0-9]{2}' /etc/alpine-release)/main | tee -a /etc/apk/repositories && apk update

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/$basearch
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.signalsciences.net/release/el/10/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://yum.signalsciences.net/release/gpgkey https://dl.signalsciences.net/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
$ 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/ubuntu/ `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/sigsci-release.list
$ sudo apt-get update

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

パッケージリポジトリを追加した後、NGINX オープンソースまたは NGINX Plus 用の NGINX モジュールをインストールできます。

制約と考慮事項

NGINX 動的モジュールをインストールする際は、次の点に注意してください。

  • NGINX 動的モジュールをインストールする前に、ディストリビューションに Fastly のパッケージリポジトリを追加し、リポジトリのメタデータを更新する必要があります。

  • インストールする NGINX 動的モジュールのバージョンは、NGINX インストールのコアバージョンと一致する必要があります。例えば、NGINX 1.18.0 をインストールしている場合、モジュールのバージョン 1.18.0 をインストールしなければなりません。

  • NGINX モジュールパッケージのファイル名には、コンパイル対象となる NGINX バージョンが含まれ、場合によってはビルドプリフィックスやディストリビューションリリース (例: 1.25.3-715~jammy) も含まれます。同じ NGINX バージョンにビルド番号が存在する場合は、ビルド番号が最も大きいパッケージをインストールすることをお勧めします。

    インストールコマンドにワイルドカード (*) を追加すると、指定された NGINX バージョンで利用可能な最新バージョンを確実にインストールできます。新しいバージョンのためにリポジトリのメタデータ (例 : apt update) を更新する必要があるかもしれません。

  • モジュールバージョン (NGINX バージョンとは異なる) は、パッケージのメタデータで利用可能です。モジュールバージョンのクエリの詳細については、「モジュールのバージョンを特定する」をご覧ください。

NGINX オープンソース用 NGINX 動的モジュールをインストールする

Fastly の NGINX オープンソース用 NGINX 動的モジュールは、NGINX オープンソース用にコンパイルされています。このモジュールをインストールする手順は次のとおりです。

  1. NGINX のバイナリバージョンを見つけます。

    $ nginx -v

    注 : 何も返されないか nginx: not found エラーが表示された場合は、NGINX が正しくインストールされ、該当するシェルパスで利用可能であることを確認してください。NGINX パッケージとしてインストールされていない場合 (tarball から抽出された場合など)、 NGINX パッケージの依存関係が満たされていないために、パッケージをインストールする後続のコマンドが失敗する可能性があります。

  2. お使いの NGINX のバージョンに適したモジュールを特定します。NGINX の安定版、メインライン、ディストリビューション提供版のどのリリースを使用しているかに応じて選択してください。

    • nginx-module-fastly-nxs : nginx.org が提供する NGINX の安定版 (偶数) リリースには、このパッケージを使用します。

    • nginx-module-fastly-nxm : nginx.org が提供する NGINX のメインライン (奇数) リリースには、このパッケージを使用します。

    • nginx-module-fastly-nxd : Linux ディストリビューションが提供する NGINX リリースにはこのパッケージを使用します。システムに NGINX がインストールされているものの、nginx.org からインストールしていない場合、ディストリビューション提供版のリリースを使用しています。

    • nginx-module-sigsci-nxo : 既存の NGINX インストールでこのパッケージがすでに使用されている場合にのみ、このパッケージを使用します。新規インストールでは、他の3つのパッケージのうち最も適切なものを使用してください。

  3. ディストリビューションのパッケージマネージャーを使用して、特定のNGINX オープンソースリリース用の NGINX 動的モジュールパッケージをインストールします。インストールするバージョンは、NGINX インストールのコアバージョンと一致する必要があります。<nginx-dynamic-module-variation> を、使用している特定のパッケージタイプに置き換えます。

    1. Debian / Ubuntu
    2. RHEL / CentOS
    3. Alpine Linux
    4. Amazon Linux

    最新バージョンのモジュールをインストールするには、次のコマンドを実行してください。

    $ sudo apt-get install <nginx-dynamic-module-variation>

    特定のバージョンのモジュールをインストールするには、次のコマンドを実行し、<nginx-core-version>をインストール済みの NGINX コアバージョンに置き換えてください。

    $ sudo apt-get install <nginx-dynamic-module-variation>=<nginx-core-version>\*

    たとえば、インストールされている NGINX コアバージョンが 1.26.0 である場合、コマンドは次のようになります。

    $ sudo apt-get install nginx-module-fastly-nxs=1.26.0\*

NGINX Plus 用 NGINX 動的モジュールをインストールする

NGINX Plus 用 NGINX 動的モジュールは、F5 が管理する NGINX Plus Web サーバー用にコンパイルされています。このモジュールをインストールする手順は次のとおりです。

  1. NGINX Plus のバージョンを見つけます。

    nginx -v

    例えば、以下のレスポンスでは NGINX Plus のバージョンは R30 です。

    nginx version: nginx/1.25.1 (nginx-plus-r30-p1)

    注 : 何も返されないか nginx: not found エラーが表示された場合は、NGINX が正しくインストールされ、該当するシェルパスで利用可能であることを確認してください。NGINX パッケージとしてインストールされていない場合 (tarball から抽出された場合など)、 NGINX パッケージの依存関係が満たされていないために、パッケージをインストールする後続のコマンドが失敗する可能性があります。

  2. ディストリビューションのパッケージマネージャーを使用して、特定の NGINX Plus リリース用の NGINX 動的モジュール (nginx-module-fastly-nxp) パッケージをインストールします。インストールするバージョンは、お使いの NGINX Plus のインストールバージョンと一致する必要があります。

    1. Ubuntu / Debian
    2. RHEL / CentOS
    3. Alpine Linux
    4. Amazon Linux 2 または 1

    お使いの NGINX コアバージョンと互換性のある最新バージョンのモジュールをインストールするには、次のコマンドを実行してください。

    $ sudo apt-get install nginx-module-fastly-nxp

    特定のバージョンのモジュールをインストールするには、次のコマンドを実行し、<nginx-core-version>をインストール済みの NGINX コアバージョンに置き換えてください。

    $ sudo apt-get install nginx-module-fastly-nxp=<nginx-plus-version>\*

    たとえば、インストールされている NGINX Plus のバージョンが R30 の場合、コマンドは次のようになります。

    $ sudo apt-get install nginx-module-fastly-nxp=30\*

NGINX 動的モジュールをロードする

NGINX 動的モジュールをインストールした後、実行時にモジュールが NGINX にロードされるように、NGINX の設定で NGINX 動的モジュールとして宣言する必要があります。

  1. NGINX 設定ファイル (多くの場合、デフォルトで /etc/nginx/nginx.conf にある) で、NGINX load_module ディレクティブを使用して、NGINX 動的モジュールを NGINX の main コンテキスト (例: pid ディレクティブの下) にロードします。

    load_module /etc/nginx/modules/ngx_http_fastly_module.so;
  2. 次のコマンドを実行して、変更が有効であることを確認します。

    $ nginx -t

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

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  3. NGINX を再起動します。

    $ service nginx restart

    init システム (例: Alpine コンテナ) を実行していないサーバーの場合、次のコマンドで設定をリロードします。

    $ nginx -s reload
  4. (任意) モジュールが正常にロードされたことを確認してください。

    $ cat /var/log/nginx/error.log | grep 'sigsci:'

    モジュールがロードされると、error.log は次のように表示されます。

    1970/01/01 00:00:00 [notice] 4242#4242: sigsci_init_main_conf: Using default UDS socket: /var/run/sigsci.sock
    1970/01/01 00:00:00 [notice] 4242#4242: sigsci:init: setting phase REWRITE: ngx-phase=3
    1970/01/01 00:00:00 [notice] 4242#4242: sigsci:sigsci_create_random: initialized random checking
    1970/01/01 00:00:00 [notice] 4242#4242: signal process started

インストールのスクリプト作成

一連のシェルコマンドを使用して、NGINX 動的モジュールをインストールすることもできます。一連のコマンドはそれぞれ、前のコマンドの出力を変数として取得します。この方法は、Dockerfile RUN ディレクティブのような、スクリプトを使用したインストールの際に有用です。ここでの例は、安定版の NGINX を既にインストールしていることを前提としています。選択したバージョンに合わせて調整してください。

  1. Debian / Ubuntu
  2. RHEL / CentOS / Amazon
  3. Alpine Linux
$ module_version=$(apt-cache madison nginx-module-fastly-nxs | grep $(nginx -v 2>&1 | grep -oP 'nginx/\K[0-9.]+') | awk -F'|' '{print $2}' | head -n 1 | xargs)
$ apt-get install -y nginx-module-fastly-nxs=$module_version
$ unset module_version

NGINX 動的モジュールを設定する

NGINX の動的モジュールは、次の追加設定をサポートしています。

Name説明セクション
sigsci_enabledモジュールの有効化または無効化on (デフォルト)、offhttp、サーバー、または場所ごと
sigsci_debugsigsci_debug のみを有効化、他のモジュールに影響なしonoff (デフォルト)HTTP
sigsci_handler_phaseモジュールがリクエストを処理するフェーズpreaccessaccessprecontentrewrite (デフォルト)HTTP
sigsci_agent_max_post_lenエージェントに送信する POST ボディの最大サイズ (バイト)0 => 投稿本文を送信しない。それ以外の場合はバイト数を 0 より大きい値で指定 (デフォルトは100000)HTTP
sigsci_agent_timeoutエージェント通信ソケットのタイムアウト時間 (ミリ秒)ミリ秒 > 0 (デフォルトは 100)HTTP
sigsci_anomaly_resp_size最大レスポンスサイズ (バイト)。この値を超える場合は異常とみなされます。バイト数 > 0 (デフォルトは 524288)HTTP
sigsci_anomaly_resp_time最大レスポンス時間 (ミリ秒)。この値を超える場合は異常とみなされます。ミリ秒 > 0 (デフォルトは 1000)HTTP
sigsci_agent_hostSignalSciences エージェントがリッスンする Unix ドメインソケットの IP アドレスまたはパス例 : tcp:localhost (デフォルトは unix:/var/run/sigsci.sock)HTTP
sigsci_agent_portエージェントがリッスンする TCP ポート。注 : IP またはホスト名に sigsci_agent_host が設定されている場合にのみ使用してください。有効な TCP ポート番号HTTP
sigsci_websocket_enabledWebSocket 検査の有効化または無効化onoff (デフォルト)http、サーバー、または場所ごと

注 : sigsci_websocket_enabledは、デフォルトでは off です。有効化するには、http セクションで指定する必要があります。これはその後、必要に応じて、serverlocation のセクションで、offon に転換することができます。

設定例

http セクションで SignalSciences モジュールパラメータを設定する例は、次のとおりです。

# sigsci module settings
##
sigsci_debug on;
sigsci_agent_timeout 200;

次の例は、sigsci_enabledパラメータで location セクションを使用する方法を示しています。

# sigsci_enabled set to "on"
location /inspect/ {
sigsci_enabled on;
proxy_pass http://127.0.0.1:80/inspect/;
}
# sigsci_enabled set to "off"
location /noinspect/ {
sigsci_enabled off;
proxy_pass http://127.0.0.1:80/noinspect/;
}

sigsci_websocket_enabled パラメータで server および location セクションを使用する詳細な例は、次のとおりです。

http {
# must be turned on in global section
sigsci_websocket_enabled on;
server {
...
# turned off for this server section
sigsci_websocket_enabled off;
# websocket turned on for this location
location /websenabled {
sigsci_websocket_enabled on;
proxy_pass http://websocket;
...
}
# websocket off for this location since it is off in server
location /websdisabled {
proxy_pass http://websocket;
...
}