share facebook facebook2 twitter menu hatena pocket slack

2014.10.17 FRI

mod_geoip2 を試した

川原 洋平

WRITTEN BY川原 洋平

こんにちわ、cloudpack の かっぱこと 川原 洋平@inokara)です。

はじめに

mod_geoip2 を試してみました Yo!

準備と導入

環境

  • Amazon Linux AMI release 2014.03
  • Apache/2.2.27 (Unix)

必要なパッケージを導入

yum install gcc
yum install GeoIP
yum install geoip-devel
yum install httpd
yum install httpd-devel

コンパイル

wget https://github.com/maxmind/geoip-api-mod_geoip2/archive/1.2.9.tar.gz
tar zxvf 1.2.9.tar.gz
cd geoip-api-mod_geoip2-1.2.9/
apxs -i -a -L/usr/lib -I/usr/include -lGeoIP -c mod_geoip.c

/usr/lib64/httpd/modules/mod_geoip.so にインストールされる。

注意

Amazon Linux の場合には既に mod_geoip.x86_64 が用意されているので注意する。今回は上記のコンパイルした環境を利用した。

設定

以下のファイルを /etc/httpd/conf.d/ 以下に置いた。

/etc/httpd/conf.d/geoip.conf

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

  # Redirect one country
  RewriteEngine on
  RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^JP$
  #RewriteRule ^(.*)$ http://www.yahoo.co.jp$1 [R,L]
  RewriteRule ^/(.*)$ /jp/$1 [L]

  # Redirect multiple countries to a single page
  RewriteEngine on
  RewriteCond %{ENV:GEOIP_COUNTRY_CODE} [^JP]$
  #RewriteRule ^(.*)$ http://www.yahoo.com$1 [R,L]
  RewriteRule ^/(.*)$ /except_jp/$1 [L]

</IfModule>

導入

sudo service httpd configtest
sudo service httpd restart

動作確認

正しい方法か判断できかねるが日本以外からのアクセスは東京リージョン以外のインスタンス(念のため)から Web サーバーにアクセスしてみる。
[Amazon Linux] mod_geoip2の動作確認 (1)

日本以外からの条件にマッチしているようだ。
[Amazon Linux] mod_geoip2の動作確認 (2)

でも、ちょっと信用出来なかったので接続元の IP を whois してみたが US となっているので、おそらく GeoIP が制御して US からの接続と判断しているようだ。

ついでに日本からアクセスしてみる。
[Amazon Linux] mod_geoip2の動作確認 (3)

おお、ちゃんと日本からの接続になっている。

まとめ

  • mod_geoip2 を利用するとお手軽に接続元 IP から接続元の国が判断出来る
  • mod_rewrite と組み合わせてページの表示を切り替えたり、アクセスブロックしたり応用の幅が広がると思う

元記事は、こちらです。
mod_geoip2 を試した