ngx_stream_geo_module モジュール

設定例
ディレクティブ
     geo

ngx_stream_geo_module モジュール(1.11.3)は、クライアントのIPアドレスに応じて値を持つ変数を作成します。

設定例

geo $geo {
    default        0;

    127.0.0.1      2;
    192.168.1.0/24 1;
    10.1.0.0/16    1;

    ::1            2;
    2001:0db8::/32 1;
}

ディレクティブ

構文 geo [$address] $variable { ... }
デフォルト
コンテキスト stream

指定した変数の値の依存関係をクライアントのIPアドレスで記述します。デフォルトでは、アドレスは$remote_addr 変数から取得されますが、他の変数から取得することもできます(例)

geo $arg_remote_addr $geo {
    ...;
}

変数は使用されたときにのみ評価されるため、大量の「geo」変数を宣言したとしても、接続処理に余分なコストが発生することはありません。

変数の値が有効なIPアドレスを表していない場合、「255.255.255.255」アドレスが使用されます。

アドレスは、CIDR記法のプレフィックス(個別のアドレスを含む)または範囲として指定します。

また、次の特別なパラメータもサポートされています。

delete
指定したネットワークを削除します。
default
クライアントのアドレスが指定したアドレスのいずれにも一致しない場合、変数に設定される値です。アドレスがCIDR記法で指定されている場合、default の代わりに「0.0.0.0/0」および「::/0」を使用できます。defaultが指定されていない場合、デフォルト値は空の文字列になります。
include
アドレスと値を含むファイルをインクルードします。インクルードは複数可能です。
ranges
アドレスを範囲として指定することを示します。このパラメータを最初に指定する必要があります。ジオベースの読み込みを高速化するために、アドレスは昇順で配置する必要があります。

geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;

    127.0.0.0/24   US;
    127.0.0.1/32   RU;
    10.1.0.0/16    RU;
    192.168.1.0/24 UK;
}

conf/geo.conf ファイルには、次の行を含めることができます

10.2.0.0/16    RU;
192.168.2.0/24 RU;

最も具体的な一致の値が使用されます。たとえば、アドレス127.0.0.1の場合、値「US」ではなく「RU」が選択されます。

範囲での例

geo $country {
    ranges;
    default                   ZZ;
    127.0.0.0-127.0.0.0       US;
    127.0.0.1-127.0.0.1       RU;
    127.0.0.1-127.0.0.255     US;
    10.1.0.0-10.1.255.255     RU;
    192.168.1.0-192.168.1.255 UK;
}