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;
}