Overview
mod_cidr_lookupは、アクセスしてきたクライアントのIPアドレスが、起動時に読み込んでおいたCIDRブロック群のいずれかにマッチするかどうかを判別するためのモジュールです。Apache 2.0と2.2系に対応しています。
マッチした結果は、環境変数 (X_CLIENT_TYPE) とHTTPリクエストヘッダ (X-Client-Type) にセットするので、Apache自身とバックエンドのWebアプリの両方で同じ情報を参照することができます。
使用例
※IPアドレス帯域の正確性などについては、情報提供元にお問い合わせください。
クローラからのアクセスは別のサーバにreverse proxyする
モバイル用のクローラには、送信元IPアドレスを公開しているものがあります。
これらの情報を使って、クローラからのアクセスを判別し、クローラはクローラ専用のサーバクラスタへreverse proxyで振り分けることができます。
mod_rewriteを使った設定例はこうなります。
RewriteCond %{ENV:X_CLIENT_TYPE} ^crawler-.* # (2) 環境変数X_CLIENT_TYPEがcrawler-で始まるときだけ。 RewriteRule ^/(.*)/$ http://4crawler/$1 [P,L] # (1) http://4crawlerにreverse proxyする
特定のクライアントからのアクセスを許可する
Allowディレクティブでは環境変数を参照することができるので、例えば自社のIPアドレス帯からのアクセスを許可したり、
Allow from env=my_company
モバイルキャリアからのアクセスを許可したり、
SetEnvIf X_CLIENT_TYPE "^(docomo|au|softbank)" is_mobile # 3キャリアのいずれかの場合は新たに環境変数is_mobileをセットする Allow from env=is_mobile
ということができます。
またWebアプリから、環境変数を参照したり、
<?php $type = getenv("X_CLIENT_TYPE"); # docomo, au, softbank, ...
リクエストヘッダを参照することによって、
<?php $r->header_in("X-Client-Type"); # docomo, au, softbank, ... $headers = apache_request_headers(); $headers["X-Client-Type"]; # docomo, au, softbank, ...
判別した結果を参照することができます。
Release Note
2008-09-16 mod_cidr_lookup-1.2
- サーバ設定とバーチャルホストのコンテキストで、mod_cidr_lookupでセットした環境変数が、SetEnvIfで参照できない問題を修正しました。
2008-09-12 mod_cidr_lookup-1.1
- mod_cidr_lookupでセットした環境変数が、SetEnvIfで参照できない問題を修正しました。ブログでコメントいただいたesさん、ありがとうございました!
2008-08-25 mod_cidr_lookup-1.0
- 最初のリリース
Download
Installation
VER=1.0 tar zxf mod_cidr_lookup-${VER}.tar.gz cd mod_cidr_lookup-${VER}/apache2 make sudo make install
Configuration
まず、モジュールをロードします。
LoadModule cidr_lookup_module modules/mod_cidr_lookup.so
mod_cidr_lookupが提供するディレクティブはCIDRFileだけです。
CIDRFile
説明 | CIDRマッチに使用するための、CIDRの一覧が書かれているテキストファイルの名前を指定する |
---|---|
構文 | CIDRFile file-path |
コンテキスト | サーバ設定ファイル, バーチャルホスト, ディレクトリ (.htaccessでは指定できません) |
モジュール | mod_cidr_lookup |
CIDRマッチに使用するための、CIDRの一覧が書かれているテキストファイルを指定します。
シェル形式(fnmatch)のワイルドカードを使って、複数のファイルを一度に指定することもできます。
CIDRFileで指定されたファイルの名前が、ヘッダや環境変数に埋め込まれる文字列になります。
例えば、
という設定とそこで指定しているCIDRのファイルが以下のときに、
アクセスしてきたクライアントのIPアドレスが10.1.1.64の場合は、ファイルbarに書かれている2つめのCIDR(10.1.1.0/24)にマッチするので、環境変数X_CLIENT_TYPEとリクエストヘッダX-Client-Typeに”bar”がセットされます。
Note
- CIDRファイルの変更を反映するには、httpdを起動し直すか、シグナル(HUP, USR1)を送って再起動してください。
Authors
- HIROSE Masaaki
- YASUI Masanobu
- HAMANO Tsukasa
- INADA Naoki
License
- Apache License Version 2.0