nginx配置geoip限制访问
本文这个方法不是很建议使用,因为限制方式有点死板,不能很灵活的使用,也有可能是我的配置不灵活的原因,好了,来看教程吧.
系统:centos 7.x
1.检查nginx是否有编译GeoIP模块
nginx -V
nginx version: qixin/1.12.1
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --pid-path=/var/run/nginx.pid --with-ld-opt=-ljemalloc --lock-path=/var/lock/subsys/nginx --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_perl_module --with-http_geoip_module --with-mail --with-mail_ssl_module --with-cc-opt=-O3 --with-cpu-opt=pentium
可以看到有--with-http_geoip_module模块.
2.更新GeoIP数据库
yum -y install geoip-devel
cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat.old--
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
3.nginx配置
vi /etc/nginx/nginx.conf
将下面的内容添加进 http {} 区域,并且要放在任何include语句之前:
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default no; CN yes; TW yes; HK yes; MO yes; }
ps:
本例中我只允许了国内,台湾,香港,澳门这些来访问.
然后在server {} 区域里添加以下内容:
if ($allowed_country = no) { return 403; }
也可以针对某个特定url进行限制:
location /admin { if ($allowd_country = no) { return 403; } }
最后重启nginx就可以了:
systemctl reload nginx
好了,这样就限制住了,但有个问题就是同时也屏蔽了google蜘蛛抓取,因为本例中是只有国内业务,无所谓google蜘蛛的抓取,所以我就没有去改配置了.
评论: