モジュール ngx_http_geo_module

構成例
ディレクティブ
     geo

ngx_http_geo_module モジュールは、クライアントの 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 { ... }
デフォルト
コンテキスト http

指定した変数の値がクライアントの IP アドレスに依存することを説明します。既定では、アドレスは $remote_addr 変数から取得されますが、別の変数 (0.7.27) から取得することもできます。たとえば

geo $arg_remote_addr $geo {
    ...;
}

変数は使用した場合にのみ評価されるため、多数の「geo」変数が宣言されていても、リクエストの処理に追加コストはかかりません。

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

アドレスは CIDR 表記(個々のアドレスを含む)のプレフィックスまたは範囲(0.7.23)として指定されます。

IPv6 プレフィックスはバージョン 1.3.10 および 1.2.7 以降でサポートされています。

以下の特殊パラメーターもサポートされています

delete
指定されたネットワークを削除します (0.7.23)。
default
クライアントのアドレスが指定されたアドレスのいずれとも一致しない場合に変数に設定される値。アドレスが CIDR 表記で指定されている場合、default の代わりに「0.0.0.0/0」と「::/0」を使用できます。default が指定されていない場合、デフォルト値は空の文字列になります。
include
アドレスと値が記載されたファイルを含めます。インクルードは複数可能です。
proxy
信頼できるアドレスを定義します (0.8.7、0.7.63)。信頼できるアドレスからリクエストが来ると、「X-Forwarded-For」リクエストヘッダーフィールドのアドレスが代わりに使用されます。通常のアドレスとは異なり、信頼できるアドレスは順番にチェックされます。
信頼できる IPv6 アドレスは、バージョン 1.3.0 および 1.2.1 以降でサポートされています。
proxy_recursive
再帰的なアドレス検索を有効にします (1.3.0、1.2.1)。再帰的な検索が無効になっている場合、信頼できるアドレスの 1 つに一致した元のクライアントアドレスではなく、「X-Forwarded-For」で送信された最後のアドレスが使用されます。再帰的な検索が有効になっている場合、信頼できるアドレスの 1 つに一致した元のクライアントアドレスではなく、「X-Forwarded-For」で送信された最後の信頼されていないアドレスが使用されます。
ranges
アドレスが範囲として指定されることを示します (0.7.23)。このパラメーターは最初にする必要があります。geo ベースのロードを高速化するには、アドレスを昇順に並べます。

geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;
    proxy          192.168.100.0/24;
    proxy          2001:0db8::/32;

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