nginx使用GeoIP限制訪問並支持白名單

 

要使用GeoIP,須要從新編譯Nginx,個人系統是centos6.5,nginx用的是tengine,須要的軟件包:
gcc、gcc-c++、 openssl、 openssl-devel、geoIP library、GeoLite Country、GeoLite City、pcre、tengine2html

1.下載須要的軟件包nginx

wget http://tengine.taobao.org/download/tengine-2.0.3.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.zip
 

2.安裝編譯用到的軟件c++

yum install gcc gcc-c++ openssl openssl-devel

3.編譯GeoIP libraryweb

gunzip GeoIP.tar.gz && tar -xvf GeoIP.tar && cd GeoIP-1.4.8 
./configure && make && make install

若是不編譯GeoIP library,在編譯nginx時會提示centos

the GeoIP module requires the GeoIP libraryapi

4.編譯nginx
先解壓pcre在執行已下命令:dom

./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_stub_status_module --without-select_module --without-poll_module --with-http_geoip_module --with-http_ssl_module --with-openssl-opt=enable-tlsext --with-pcre=../pcre-8.33
make && make install

5.配置GeoIPui

gunzip GeoLiteCity.dat.gz  && gunzip GeoIP.dat.gz

將這兩個解壓後的庫文件移到nginx的conf目錄下,以後在nginx.conf中加入:spa

geoip_country /usr/local/nginx/conf/GeoIP.dat;
geoip_city /usr/local/nginx/conf/GeoLiteCity.dat;
#geoIP的白名單
geo $remote_addr $ip_whitelist {
default 0;
include ip.conf;
}.net

在要使用geoIP的虛擬主機中的location中加入GeoIP配置,這裏直接貼一個配置

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#白名單配置
if ($ip_whitelist = 1) {
proxy_pass http://web;
break;
}
#屏蔽的國家返回403
if ($geoip_country_code ~ "(HK|TW|PH|MO|US)") {
return 403;
}
proxy_pass http://web;
}

在conf下新建一個ip.conf做爲Geoip的白名單,支持ip段,內容和格式爲:

8.8.8.8 1;
8.8.8.8/24 1;

檢查配置

/usr/local/nginx/sbin/nginx -t

若是是64位系統可能會報:

/nginx: error while loading shared libraries: libGeoIP.so.1: cannot open shared object file: No such file or directory

解決方法:

ln -s /usr/local/lib/libGeoIP.so* /lib64/

以後

ldd /usr/local/nginx/sbin/nginx 

確認下沒有not found的庫文件便可。
這樣就配置好了nginx,而且經過GeoIP限制了國家和城市的訪問,而且支持白名單。

 

 

原文連接:http://www.52os.net/articles/configure-nginx-using-geoip-allow-whitelist.html

相關文章
相關標籤/搜索