• 本站在不影响浏览的前提下添加了少量广告,请允许本站广告可显示,感谢~
  • 如果有必要,请使用Telegram关注https://t.me/getssr_info
  • 关于国内某个软件代理商代理的CorelDRAW系列软件,如果各位需要正版请访问corel官方网站,不要访问带有china的网站!!!反正话是放在这里了,听不听随你
  • 如果遇到文章图片不显示请联系管理员处理,谢谢
  • 欢迎访问寡人的吐槽胜地,我们真的只是吐槽,不谈技术,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 版权声明:大部分文章是从网上复制的!并不表示全部都是从网上复制的!

使用 Nginx 屏蔽部分国家或地区IP,禁止访问网站

技术类 大变态 来源:Lucas's Blog 6年前 (2018-06-01) 3879次浏览 已收录 0个评论
文章目录[隐藏]

博主的环境是用宝塔搭建的,所以安装目录会和正常的 LNMP 目录不太一样。

使 Nginx 支持 GeoIP

我们先检查一下 Nginx 是否有 GeoIP 模块。

nginx -V

看下输出界面有没有包含 --with-http_geoip_module ,如果有的话就说明 Nginx 已经编译了 GeoIP 模块,直接到安装 GeoIP检查 GeoIP这一步。

安装 GeoIP

如果没有安装 GeoIP 模块,先安装 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
echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
ldconfig

添加未编译安装模块

cd 到 Nginx 源码目录,因为我是用宝塔安装的环境,所以目录在/www/server/nginx

cd /www/server/nginx/src

使用参数从新配置,注意这里参数是直接复制 nginx -V 显示出来的,把configure arguments: 后面的参数复制出来,后面加上--with-http_geoip_module

./configure --user=www --group=www --prefix=/www/server/nginx --with-openssl=/www/server/nginx/src/openssl --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_gunzip_module --with-stream --with-stream_ssl_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-ld-opt=-ljemalloc --with-http_geoip_module #不要复制这里的,要根据自己的进行修改

等上面执行完了,然后再编译

make

替换 Nginx 二进制文件。(最好备份下当前 Nginx 文件,避免出问题了没办法恢复)

#我这边是用宝塔安装的环境,目录是/www/server/nginx,如果不是宝塔安装的环境,请换成自己服务器上的目录
#先停止 nginx 再替换二进制文件,提示 overwrite 的话记得输入 y 后回车。
service nginx stop
cp /www/server/nginx/sbin/nginx  /www/server/nginx/sbin/nginx.bak
cp ./objs/nginx  /www/server/nginx/sbin/

替换成功后,重启 Nginx。然后查看一下 GeoIP 模块加载情况。如果后面包含了–with-http_geoip_module 就成功了。

service nginx start
nginx -V

检查 GeoIP

检查一下/usr/local/share/GeoIP/目录是否包含 GeoIP.dat,如果没有的就直接下一个最新的数据库

cd /usr/local/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz

配置 Nginx,添加变量

打开 Nginx 配置文件。

#注意!目录换成自己的 Nginx 目录,我这个目录是宝塔安装的 ,或者进入面板修改
vim /www/server/nginx/conf/nginx.conf

添加变量,在 http{} 区域任意位置添加如下变量

geoip_country /usr/local/share/GeoIP/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;

配置规则

在你需要的网站上配置规则
编辑 Nginx 网站配置文件,在 server {} 区域内添加代码

#返回 403
if ($geoip_country_code = CN) {
   return 403;
}
#指定页面
 if ($geoip_country_code = CN) {
    root /451.html;
 }

上面那段代码,CN 就是中国大陆地区,如果中国大陆地区的 IP 访问网站就返回 403,当然你也可以单独写一个界面返回到指定界面。如果你想屏蔽其他国家或地区的 IP 访问 那么把 RU 改成对应就可以了 ,以此类推。
这样就设置完毕了,可以任意屏蔽某个国家的 IP 访问。当然 GeoIP 还有很多种写法,还可以屏蔽某个城市的 IP,想学的话可以去网上找找。

附表:

中国大陆地区编号:
相应的省份代码:

CN,01,”Anhui”
CN,02,”Zhejiang”
CN,03,”Jiangxi”
CN,04,”Jiangsu”
CN,05,”Jilin”
CN,06,”Qinghai”
CN,07,”Fujian”
CN,08,”Heilongjiang”
CN,09,”Henan”
CN,10,”Hebei”
CN,11,”Hunan”
CN,12,”Hubei”
CN,13,”Xinjiang”
CN,14,”Xizang”
CN,15,”Gansu”
CN,16,”Guangxi”
CN,18,”Guizhou”
CN,19,”Liaoning”
CN,20,”Nei Mongol”
CN,21,”Ningxia”
CN,22,”Beijing”
CN,23,”Shanghai”
CN,24,”Shanxi”
CN,25,”Shandong”
CN,26,”Shaanxi”
CN,28,”Tianjin”
CN,29,”Yunnan”
CN,30,”Guangdong”
CN,31,”Hainan”
CN,32,”Sichuan”
CN,33,”Chongqing”


本站大部分资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费内容,请在下载后 24 小时之内自觉删除,若作商业用途请购买正版;如果有版权争议,请发送邮件至 master@digac.cc(请留下写明原因和文章链接),我们将及时处理,谢谢!

喜欢 (2)
大变态
关于作者:
头像
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址