GeoLite2 を Apache httpd で利用する方法を解説します。 (配布元の README.md に大体書いてありますが)
パッケージが提供されているならそれをインストールしてください。提供されてない場合は手動でコンパイル・インストールする必要があります。 (Debian系のLinuxディストリビューションでは Apache httpd 用モジュールのパッケージが用意されてない)
配布元 から最新版を入手する。
展開、コンパイルする。
./configure
makeインストールする。
sudo make installインストールにより Deian系だと
/etc/apache2/mods-available/maxminddb.load
というファイルが作成されるので、シンボリックリンクを作成し有効にする。
sudo ln -s /etc/apache2/mods-available/maxminddb.load /etc/apache2/mods-enabled/Debian系だと /etc/apache2/sites-enabled
の下にWebサイトの設定ファイルを用意してるでしょうから、そこに記述する。
モジュールの読み込み例:
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile DB /usr/share/GeoLite2/GeoLite2-Country.mmdb
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
</IfModule>
許可リスト方式(指定した国だけアクセスを許可する)の例:
SetEnvIf MM_COUNTRY_CODE ^JP AllowCountry
SetEnvIf MM_COUNTRY_CODE ^US AllowCountry
Require env AllowCountry
Require all denied
拒否リスト方式(指定した国のアクセスを拒否する)の例:
SetEnvIf MM_COUNTRY_CODE ^CN DenyCountry
SetEnvIf MM_COUNTRY_CODE ^(RU|BR) DenyCountry
Require not env DenyCountry
SetEnvIf の行は複数行列挙しても正規表現で一行にまとめても機能としては同じです。 好みの方で記述してください。
拒否リストで RewriteEngine を使う場合は、上記の Require not 行の代わりに例えばこう書く:
RewriteCond %{ENV:DenyCountry} 1
RewriteRule ^.*$ http://127.0.0.1/ [R=404,L]
アクセスログに国コードを残したい場合は LogFormat に
%{MM_COUNTRY_CODE}e と記述する。 標準で用意される LogFormat
の combined に追加する例:
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
↓
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" \"%{MM_COUNTRY_CODE}e\"" combined
(以上)