아파치에 GEO-IP 모듈 올리기
GEOIP API C 받기
http://geolite.maxmind.com/download/geoip/api/c/ 방문해서 최신껄로 받자
./configure --prefix=/usr/local/GeoIP (prefix 를 잡아주니 mod_geoip 할때 에러가 뜨는거 같긴 한데 테스트중)
make
make install
/usr/local/GeoIP/share/GeoIP/GeoIP.dat GEOIP : 국가 정보를 담고 있는 데이터 (디폴트로 저곳에 있다)
- wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz (다운)
- gzip -d GeoIP.dat.gz 받아서 압출풀면 끝임
Mod_geoip 다운
http://www.maxmind.com/download/geoip/api/mod_geoip2/ 방문해서 최신걸로 받자
아래것이 머하는건지는 모르겠는데 아무튼 해주면 됨 둘중 하나만 해주면 될듯 한데 테스트 해봐야겠음
/usr/local/apache/bin/apxs -a -i -L/usr/local/GeoIP/lib -I/usr/local/GeoIP/include -lGeoIP -c mod_geoip.c
/usr/local/apache/bin/apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c
하고 나면 httpd.conf에 아래라인이 하나 추가되면 성공임
LoadModule geoip_module modules/mod_geoip.so
로그포맷 (하니깐 끝에 KR , CN 이런식으로 아파치 ACCESS LOG에 국가코드가 찍힘)
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{Host}i %{GEOIP_COUNTRY_CODE}e"
httpd.conf
LogFormat "%v %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b %{GEOIP_COUNTRY_CODE}e" KENSEI
- 프록시를 거쳐도 실제 아이피가 찍히고 끝에 국가코드가 찍히게 함
실제로 적용하려면 아래와 같은 규칙이 필요함 어떻게 적용하느냐에 따라 유연하거나 견고하게 가능할듯함
ex) 아래는 virtualhost로 구성된 서버에 대해 적용해보았다
<IfModule mod_geoip.c>
GeoIPEnable on
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
</IfModule>
<Directory /home/tc>
AllowOverride All
Options +ExecCGI
<Limit GET POST>
SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry
Order deny,allow
Deny from env=BlockCountry
</Limit>
Allow from XXX.XXX.250.101
</Directory>
ex2) 그냥 웹서버 하나인 경우는 속편하게 아래와 같이 적용시키니 적용이 되었다
저기 아래에 있는 Location 부분이 URL 경로를 의미하는지는 더 테스트 해봐야겠음
<IfModule mod_geoip.c>
GeoIPEnable on
GeoIPDBFile /usr/local/Geoip/share/GeoIP/GeoIP.dat
#<Location />
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
<Limit GET POST>
Order Deny,Allow
Deny from env=BlockCountry
#Allow from XXX.XXX.115.201
</Limit>
#</Location>
참고블로그 : http://www.cyworld.com/ruo91/2842916