1.下载新版nginx
cd /tools/
wget http://swf.***.com/soft/nginx-0.8.55.tar.gz

2.安装GeoIP
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
tar -zxvf GeoIP.tar.gz
cd GeoIP-1.4.8/
./configure
make && make install


3.重新编译nginx
cd /tools/
tar zxvf nginx-0.8.55.tar.gz
cd /tools/nginx-0.8.55

编译之前查看现在的编译参数
/usr/local/nginx/sbin/nginx -V

重新编译

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_geoip_module

make && make install


/usr/local/nginx/sbin/nginx -V

提示错误:

/usr/local/nginx/sbin/nginx:

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


查看一下类库路径

ldd /usr/local/nginx/sbin/nginx

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


ldconfig
/usr/local/nginx/sbin/nginx -V 错误提示消失

4.下载ip库并配置

cd /usr/local/nginx/conf/

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
cd vhosts/
vim vhost.conf
在虚拟主机web目录行之后添加

if ($geoip_country_code ~ CN) {
return 403;
}


在nginx.conf中 gzip_vary on后面添加
geoip_country /usr/local/nginx/conf/GeoIP.dat;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

5.重起nginx就行了
killall nginx
/usr/local/nginx/sbin/nginx


6.今天因为业务需要,需要禁止美国用户访问web服务器,而我们支付服务器也是美国ip,因此需要把支付服务器加入白名单,在nginx 虚拟主机加入以下配置:

if ($geoip_country_code ~ US) {
set $switch Y;
}

if ($remote_addr != "108.168.254.6") {
set $switch "${switch}E";
}

if ($remote_addr != "173.192.1.20") {
set $switch "${switch}S";
}

if ($remote_addr != "216.1.197.19") {
set $switch "${switch}1";
}

if ($switch = YES1) {
return 403;
}