举例比如限制泰国地区的IP访问:
前提条件,安装了http geoip 或stream geoip模块的Nginx Plus或者开源nginx
Maxmind的GeoLite Legacy数据库
1.安装NginxPlus
yum -y install nginx-plus-module-geoip
在配置文件中开启GeoIP动态模块
load_module modules/ngx_http_geoip_module.so;
load_module modules/ngx_stream_geoip_module.so;
1.1 对于开源的Nginx
nginx -V 确保已经安装了geoip模块
2.然后从MaxMind下载ip库文件
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
(GeoLite2-Country.mmdb)
配置地理位置数据库的路径
http语句中引用数据库文件
http {
...
geoip_country GeoIP/GeoIP.dat;
geoip_city GeoIP/GeoLiteCity.dat;
... }
通过geoip_country和geoip_city 指令的变量把数据传到map或split_client模块
map $geoip_country_content_codes $nearest_server {
default default {};
EU eu;
NA na;
AS as;
AF af;
...
}
然后可以根据 $nearest_server 变量传入的值选择一台upstream服务器;
......
server {
listen 1235;
proxy_pass $nearest_server;
...
location / { root /home/vpsee/www; if ($geoip_country_code = CN) { root /home/vpsee/cn; }
if ($geoip_country_code = VN) { root /home/vpsee/vn; }
...
}
upstream eu {
server eu1.example.com:12345;
server eu2.example.com:12345;
}
http语句内嵌server语句实现将IP库文件,通过IP判断是否提供网页服务。
$geoip_city_content_code 变量
proxy_pass 去匹配相应的upstream服务器,进行响应即可。