たくさんのルールがある場合には、http_geo_module
の変数を使うほうが
良いとマニュアルにあります。
実際、geo モジュールの変数を使うと非常に簡単になります。
geo ![]() ![]() |
geo ディレクティブは、httpコンテキストのみで利用できます(勿論、定義した 変数自体は他のコンテキストで利用できます)。
geo ディレクティブでは、$remote_addr
のアドレスに対して、
{ ... }
の中の条件を評価し、その結果が変数 $variable
に
格納されます。もし、評価するアドレスを別の変数のものにしたい場合に、
$address
を指定します。例えば、
geo $arg_remote_addr $mygeo { .... } |
有効なIPアドレスでないならば、255.255.255.255
が利用されます。
{ ... }
の中に指定するアドレスは、CIDR あるいは範囲で指定します。
例を挙げます。
http { geo $myallow { 127.0.0.1 allow; 192.168.0.0/16 allow; } server { location / { if ( $myallow = "" ){ return 404; } } } } |
geo では、マッチしなかった場合デフォルトの値がセットされます。デフォルト
の値を決めたい場合には、 default パラメータを用いますが、もし設定されて
いなければヌル文字 ""
が使用されます。
geo $myallow { default disable; 127.0.0.1 allow; 192.168.0.0/16 allow; } |
この場合、マッチしなければ、文字列 "disable"
が変数 $myallow
にセットされます。
ちなみに、allow
は単なる文字列として変数$myallow
に格納される
だけだという点に注意して下さい。
実際の利用方法としては、例えば、スマートフォン (キャリアごとのIPアドレスが入手できます) からのアクセスかどうかを判断して、 アクセスする場所を変えたり、国別IPアドレスを見て、クライアントの国に よって、アクセス先を変えたり、リダイレクトするなども出来ます。
なお、パラメータには以下のものがあります。
geo $country { default ZZ; include geo.conf; delete 127.0.0.0/16; proxy 192.168.100.0/24; 127.0.0.0/24 US; 127.0.0.1/32 RU; 10.1.0.0/16 RU; 192.168.1.0/24 UK; } |
上の例では、例えば 127.0.0.1
は、最も狭い範囲でマッチしている
RU にヒットし、US にヒットする訳ではない。
geo $country { ranges; default ZZ; include geo.conf; 127.0.0.0-127.0.0.1 US; 127.0.0.2-127.0.0.3 RU; 127.0.0.1-127.0.0.255 US; 192.168.1.0-192.168.1.255 UK; } |