Nginx使用GeoIP模块来限制地区访问

举例比如限制泰国地区的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服务器,进行响应即可。

 

转载于:https://www.cnblogs.com/Enzoo/p/10571335.html

你可能感兴趣的:(Nginx使用GeoIP模块来限制地区访问)