KUSANAGI上のLAMP/LEMPアプリで、アクセス元国判別をしてみる


Akira Tsumuraです。普段はのんびりKUSANAGIサーバのトラシュをしています。
KUSANAGIアドベントカレンダー 8日目を担当します。

今回は、KUSANAGI上のLAMP/LEMPアプリケーション上で、アクセス元の国判別をする方法を記述してみたいと思います。

■GeoIP2とは?

MAXMIND社による、IPアドレス及び地理情報のデータベース、およびそれを利用するライブラリを指します。
https://www.maxmind.com/ja/geoip-demo

オープンソースデータの場合、国情報および都道府県情報(但し精度は荒い)がリリースされています。
有償のデータの場合、より高精度なデータが提供されます。

■GeoIP2ライブラリのインストール

kusanagiユーザ上の任意のディレクトリで、以下のコマンドを実行します。

$ curl -sS https://getcomposer.org/installer | php7
$ php7 composer.phar require geoip2/geoip2:~2.0
併せて、オープンソース版のライブラリをダウンロードして展開します。
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
$ gzip -d GeoLite2-City.mmdb.gz

以下のサイトにあるサンプルコードを実行しましょう。
https://github.com/maxmind/GeoIP2-php

以下のように、IPアドレスを元に国名・市町村名・緯度経度といった情報を調べることができます。
$ php7 demo.php 
US
United States
美国
Minnesota
MN
Minneapolis
55414
44.9759
-93.2166

このライブラリはComposerによるライブラリですので、PHP5.6・HHVMでも同様に実行可能です。

$ php demo.php
$ hhvm demo.php

■KUSANAGI上での注意点
KUSANAGI上ではfcache(FastCGI Cache)が有効となっている場合があり、PHPの出力結果がキャッシュされてしまいます。
よって、fcacheは無効にする事を推奨します。

■おわりに
Q:クリスマスの予定は?
A:原稿デス・・・。TωT

明日は、僕の後ろの席のはせべー、よろしく☆


Post Author: TsumuraAkira

草食系インフラエンジニア。最近はSword Art Onlineにハマっているらしい。