先要给NGINX安装ngx_http_geoip2_module模块安装方法:大米/ngx_http_geoip2_module使用HLusECS可以一键安装并设置好GeoLite2-Country.mmdb,这里不再介绍安装过程。要限制访问需要 ... ... ... ... ... ... ... ... ...
先要给NGINX安装ngx_http_geoip2_module模块 下面添加
安装方法见:大米/ngx_http_geoip2_module

使用HLusECS可以一键安装并设置好GeoLite2-Country.mmdb,这里不再介绍安装过程。

要限制访问需要修改文件
/usr/local/nginx/conf/nginx.conf
在
# geoip2 配置geoip2 /usr/local/nginx/geoip/GeoLite2-Country.mmdb {$geoip2_data_country_code country iso_code;$geoip2_data_country_name country names zh-CN;}
map $geoip2_data_country_code $allowed_country {
default 0;
CN 1;
}
站点的server段里面加一下代码拒绝所有不是国内ip:
if ($allowed_country = 0) { return 403; } # 这里显示的是允许国内的ip访问,国外直接返回403
相反,如果要禁止国内访问(我们访问不了某些国外网站,或许并不是我们墙了他们,而是他们这样墙了我们):if ($allowed_country = 1) { return 403; }
如果要支持地区城市级别的,需要自己下载支持地区级别的数据库文件比如:GeoLite2-City.mmdb免费版的不够完善,建议收费版。
在nginx.conf文件中添加
geoip2 /usr/local/nginx/geoip/GeoLite2-City.mmdb {
$geoip2_data_city_continent_code continent code;
$geoip2_data_city_continent_name continent names zh-CN;
$geoip2_data_city_country_code country iso_code;
$geoip2_data_city_country_name country names zh-CN;
$geoip2_data_city_region_code subdivisions 0 iso_code;
$geoip2_data_city_region_name subdivisions 0 names zh-CN;
$geoip2_data_city_location_latitude location latitude;
$geoip2_data_city_location_longitude location longitude;
$geoip2_data_city_postal postal code;
$geoip2_data_city_city_name city names en;
}
表示通过ngx_http_geoip2_module根据访问这个ip获得相应的geo信息。
接下来打开fastcgi.conf文件,在文件末尾添加以下代码:
fastcgi_param MM_CONTINENT_CODE $geoip2_data_city_continent_code;
fastcgi_param MM_CONTINENT_NAME $geoip2_data_city_continent_name;
fastcgi_param MM_COUNTRY_CODE $geoip2_data_city_country_code;
fastcgi_param MM_COUNTRY_NAME $geoip2_data_city_country_name;
fastcgi_param MM_REGION_CODE $geoip2_data_city_region_code;
fastcgi_param MM_REGION_NAME $geoip2_data_city_region_name;
fastcgi_param MM_LATITUDE $geoip2_data_city_location_latitude;
fastcgi_param MM_LONGITUDE $geoip2_data_city_location_longitude;
fastcgi_param MM_POSTAL_CODE $geoip2_data_city_postal;
fastcgi_param MM_CITY_NAME $geoip2_data_city_city_name;
这样就可以将geo信息传递到php上了。
配置好以后重载一下nginx
sudo service nginx reload
如果不报错就没啥问题了,去phpinfo查看
$_SERVER
有无地理位置信息吧要检测GeoLite2-City.mmdb文件还可以
使用mmdblookup命令在库中搜索试试:
mmdblookup -f /usr/local/nginx/geoip/GeoLite2-City.mmdb -i 121.196.11.151
扫描二维码,手机查看
声明:部分数据/图片来源互联网,不代表欢乐你我,真实性请妥善甄别。