エージェント偽装を防ぐため、携帯キャリアの判別にIPアドレスを使っているところは多いと思います。
使うところは基本的に以下の3つではないでしょうか。
携帯キャリアのIPアドレスはけっこう頻繁に変わるので、それぞれに別の設定ファイルを作ると管理がたいへんです。
mod_cidr_lookupを使って全部統合しちゃいましょう!!
http://lab.klab.org/wiki/Mod_cidr_lookup
http://dsas.blog.klab.org/archives/51306248.html
インストールは上記リンクからダウンロードしてmake && make installするだけなので割愛!
それではさっそく・・・
キャリア判別用の設定ファイルを作る
[mikeda@cent ~]# ls /etc/httpd/conf.d/ip.d/ docomo ezweb local softbank [mikeda@cent ~]# cat /etc/httpd/conf.d/ip.d/docomo 111.89.188.0/24 111.89.189.0/24 111.89.190.0/24 ...
簡単ですね!!
キャリアのIPアドレスに関する設定ファイルはこれだけです。
では冒頭の3つについて、やりかたを1つずつ説明していきます。
ApacheのIP制限
例として、携帯とローカル環境のみアクセスを許可する設定です
LoadModule cidr_lookup_module modules/mod_cidr_lookup.so CIDRFile "/etc/httpd/conf.d/ip.d/*" Alias /cidr_test /var/www/cidr_test SetEnvIf X_CLIENT_TYPE ^(docomo|au|softbank) is_mobile SetEnvIf X_CLIENT_TYPE ^local is_local <Directory /var/www/cidr_test> Order deny,allow Deny from all Allow from env=is_mobile Allow from env=is_local </Directory>
これで外部PCからのアクセスは403に!
いちばん上の2行がmod_cidr_lookupのロード、設定読み込みなので、
これを実施することで以下の処理が可能になります。
WEBプログラム
テストプログラム
<pre> <?php echo "\$_SERVER\n"; print_r($_SERVER); echo "HTTP_HEADER\n"; print_r(getallheaders()); ?> </pre>
docomoのケイタイでアクセスするとこういう出力が得られます。
$_SERVER Array ( [X_CLIENT_TYPE] => docomo [is_mobile] => 1 ... ) HTTP_HEADER Array ( ... [X-Client-Type] => docomo )
きっちり環境変数とHTTPヘッダがセットされてます!
アクセスログ集計
LogFormat "%h %l %u %t \"%r\" %>s %b %{X_CLIENT_TYPE}e" combined
アクセスログにキャリア情報がついてきます!!!
124.146.175.165 - - [08/Sep/2010:12:00:54 +0900] "GET /cidr_test/ HTTP/1.1" 200 1815 docomo 192.168.1.11 - - [10/Sep/2010:14:39:56 +0900] "GET /cidr_test/ HTTP/1.1" 200 2913 local
キャリアのIPアドレスに関する設定が1箇所にまとまり、
全ての環境で使用する変数が統一されて見通しもよくなったと思います。
※さらに@hirose31さんが
という超絶に便利なモノを作ってくれています
http://d.hatena.ne.jp/hirose31/20100406/1270487681