什麼是GeoIP
GeoIP為通過通路IP進而定位到經緯度、國家地圖、或者省(州)等位置資訊。我們可以通過此功能進行對某一個國家、或者某一個地域進行限制通路,或者是實作自定義個性化的功能。

如何啟用GeoIP
# libmaxminddb (因為需要讀取在GeoIP2的IP資料庫庫,需要使用到libmaxminddb中的一個C庫)
wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz
tar zxvf libmaxminddb-1.3.2.tar.gz
cd libmaxminddb-1.3.2
./configure
make
make install
# 添加庫路徑并更新庫
sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
ldconfig
# GeoIP
wget https://github.com/leev/ngx_http_geoip2_module/archive/3.2.tar.gz
tar zxvf 3.2.tar.gz
# Nginx
./configure --prefix=/usr/local/nginx --add-module=../ngx_http_geoip2_module-3.2
make & make install
# GeoLite城市庫及國家庫(這個庫是為了将IP位址翻譯成具體的位址資訊)
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
gunzip GeoLite2-City.mmdb.gz
gunzip GeoLite2-Country.mmdb.gz
mkdir /data/geoip
mv GeoLite2-City.mmdb /data/geoip/city.mmdb
mv GeoLite2-Country.mmdb /data/geoip/country.mmdb
# 修改配置檔案啟用GeoIP
vim /usr/local/nginx/conf/nginx.conf
http {
geoip2 /data/geoip/country.mmdb {
$geoip2_data_country_code default=CN country iso_code;
$geoip2_data_country_name country names en;
}
geoip2 /data/geoip/city.mmdb {
$geoip2_data_city_name default=Shenzhen city names en;
}
server {
listen 80;
server_name localhost;
location / {
add_header geoip2_data_country_code $geoip2_data_country_code;
add_header geoip2_data_city_name $geoip2_data_city_name;
if ($geoip2_data_country_code = CN){
root /data/webroot/cn;
}
if ($geoip2_data_country_code = US){
root /data/webroot/us;
}
}
}
如何檢查GeoIP效果
mkdir /data/webroot/us
mkdir /data/webroot/cn
echo "US Site" > /data/webroot/us/index.html
echo "CN Site" > /data/webroot/cn/index.html
美國矽谷ECS通路情況,GeoIP子產品成功擷取到國家資訊為US,城市資訊為San Mateo。
中國華南ECS通路情況,GeoIP子產品成功擷取到國家資訊為CN,城市資訊為Shenzhen。