NGINX:nginx精准禁止特定国家或者地区IP访问
转载来源 :NGINX:nginx精准禁止特定国家或者地区IP访问 :http://www.safebase.cn/article-258751-1.html
摘要: 要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况。解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要money!!!2.nginx,直接使用geoip模块,现在我们使用最新的ngx_http_geoip2,该模块可以精确到国家、省、市
要求:对网站的信息,比如某个访问节点不想国内或者国外的用户使用,禁止国内或者国外或者精确到某个城市的那种情况。
解决方式:1.Cloudfalre来实现禁止特定国家的ip访问,比较简单,但是需要money!!!
2.nginx,直接使用geoip模块,现在我们使用最新的ngx_http_geoip2,该模块可以精确到国家、省、市等一级的IP,并且全部由Nginx执行识别和阻止访问,但是Nginx编译起来比较费事。
最终解决方式,使用nginx的geoip模块:
部署操作:
一:安装geoip2扩展依赖
yum install libmaxminddb-devel -y
二:下载ngx_http_geoip2_module
git clone https://github.com/leev/ngx_http_geoip2_module.git
注意要是没有git的话就自己在网上下了然后直接拖到服务器上也行,不过注意格式。
三:查看模块的完整性,将下载好的模块放到指定目录下,方便nginx编译时指定路径,我是放到/usr/local/下面的。
四:编译nginx并检查模块是否安装成功
nginx建议选择最新版本,我选的是1.18,也有说1.15都行的,选了1.18.之前选了1.15的没成功。但是为了匹配最新版本,一下就成功了,只能感叹神奇,所以选择1.18是正确的,哈哈!
注意:在编译时,我们只要加上–add-module=/usr/local/ngx_http_geoip2_module这个参数或者命令就行了,注意一定要加上额,不加等于没有geoip模块,就更没有这个功能了,为了简化,具体的nginx编译参数我就不写了,如下。
./configure --add-module=/usr/local/ngx_http_geoip2_module --user=www --group=www --prefix=......................................
之后的功能make && make install 等照常规流程来就行了。
nginx整体安装完就检查下模块是否都有:
[root@nsh install]# nginx -V
Tengine version: Tengine/2.3.2
nginx version: nginx/1.17.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.1.1b 26 Feb 2019
TLS SNI support enabled
configure arguments: --add-module=/usr/local/ngx_http_geoip2_module --user=www --group=www --prefix=/www/server/nginx--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 --add-module=/www/server/nginx/src/nginx-sticky-module--with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream
--with-stream_ssl_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module
--with-http_gzip_static_module --with-http_gunzip_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-cc-opt=-Wno-error --with-ld-opt=-ljemalloc
五:验证是否成功
ldd /usr/local/nginx/sbin/nginx
六:修改nginx配置
模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:
数据库地址:
cd /usr/local/share/GeoIP
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
之后使用gunzip解压这两个库文件。
我这是放在 /usr/local/share/GeoIP/ 里面。
修改nginx配置文件,因为geoip2和geoip是不一样的,我们可以在 http 段增加国家代码的map映射:
在http端中添加如下代码:
geoip2 /usr/local/share/GeoIP/GeoLite2-Country.mmdb {$geoip2_data_country_code country iso_code;
}
map $geoip2_data_country_code $allowed_country {default yes;CN no;}
如下图:
站点的server段里面加一下代码拒绝所有不是国内ip:
if ($allowed_country = yes) { return 403; }
这里显示的是允许国内的ip访问,国外直接返回403
如下图:
配置完后重启nginx即可。
七:测试
之前买了国外的联网ip主机,做了vpn。但是国庆期间封了,只能用国内和国外的两台主机测试了。
国内的阿里云主机:
[root@nsh nginx]# curl -I -m 10 -o /dev/null -s -w %{http_code} www.nsh.pub
200
国外的云主机:
[root@LooseGargantuan-VM ~]# curl -I -m 10 -o /dev/null -s -w %{http_code} www.nsh.pub
403
如此测试,是成功了的,如果是相反的,禁止国内访问, 那么server段里“if ($allowed_country = yes) { return 403; }”的yes改成no即可。
总结:
由于 IP 广播泛滥,所以 GeoIP 并不是那么准确,如果觉得 GeoIP 库太旧了,需要自行到官网下载最新版,将上述配置的路径改一下即可。
GeoIP不光可以屏蔽国家,还可以屏蔽身份、城市,如果有需要可以自己研究下。
作者:水墨-丹青
原文:https://www.cnblogs.com/nsh123/p/11626651.html
NGINX:nginx精准禁止特定国家或者地区IP访问相关推荐
- R语言ggplot2进行特定国家或者地区的地图可视化、在地图上标出所有首府城市所在地(plot the locations of the capital cities)
R语言ggplot2进行特定国家或者地区的地图可视化.在地图上标出所有首府城市所在地(plot the locations of the capital cities) 目录
- 禁止北京地区IP访问站点
<script type="text/javascript" src="http://counter.sina.com.cn/ip" charset=&q ...
- Nginx配置相关结构划分的技巧和禁止IP访问
Nginx配置相关结构划分的技巧 原文来自:http://developer.51cto.com/art/201003/190953.htm Nginx配置需要一定的技巧,我们在不断的使用和维护中就会 ...
- 苹果账号改区 数据会转移服务器吗,Apple ID国家或地区如何更改 无法成功转区的解决方法...
在某些情况下,我们可能需要更换Apple ID 的国家或地区,如果您不知道如何进行操作,或者无法成功改变地区,可以参考如下信息. Apple ID国家或地区如何更改: 更改地区之前需要注意这些事项 1 ...
- 服务器禁止用ip访问站点,windows服务器禁止ip访问方法介绍
下边是方法 控制面板-管理工具-本地安全策略 或者命令 gpedit.msc 选择创建 IP 安全策略 点选下一步 我们就是要禁止他,不和他说话,那么,取消勾选 直接按完成.那个勾选是默认的 注意 ...
- Nginx禁止特定用户代理(User Agents)访问(转)
Nginx可以通过各种方式来限制访问,例如NGINX基本Http认证.allow/deny等等,这些都是前文提过的,今天来看看nginx如果通过用户代理来禁止访问. user agent是什么? 用户 ...
- 网站通过nginx设置黑/白名单IP限制、国家城市IP访问限制
一.黑/白名单IP限制访问配置 nginx配置黑白名单有好几种方式,这里只介绍常用的两种方法. 1.第一种方法:allow.deny deny和allow指令属于ngx_http_access_mod ...
- php禁止某地区ip,如何禁止某个地区或国家IP访问网站?
有许多站长在检查了Bluehost主机上的错误日志(error log)时会发现许多访客(大部分机器人)试图要攻击你的网站,或到你的论坛发表垃圾评论或或劫持你的邮件程序来发垃圾邮件.基于这些或其他特殊 ...
- Nginx 禁止某 IP 访问
导语 总有一些不怀好意的人来访问我的网站,而且频率还很高,所以就用简单的方式禁止访问,就用 Nginx 来实现. 创建黑名单 在 /usr/local/nginx/conf 目录下创建 blocksi ...
最新文章
- 加速键使用方法详解(示例)
- 渗透知识-SSRF漏洞
- ITIL的一些简单感受
- java-逻辑运算符
- 远程协助TeamView软件 轻松控制计算机
- 《Android深度探索》第一章心得体会
- 运行TensorFlow
- git 提示error setting certificate verify locations 解决方案
- UML 统一建模语言Unified Modeling Language (UML)
- Win11系统安装 WSA
- 双硬盘双win10互不干扰_双硬盘装WIN7 WIN10双系统
- 模拟器:思科 配置静态路由+下一跳如何配置,使三个路由器相互通信
- php orc 验证码,百度图片识别orc实现普通验证码识别
- 如何关闭OPPO手机服务器维护,OPPO天气预警怎么关闭
- 揭露安利!!!!!!
- mongdb权限问题
- Joshua Loth Liebman
- Python每日一练-----完美数
- 计算机电子电路原理图,电子电路图 如何看懂电子电路图 凡亿教你如何看懂电路图...
- casio学生用计算机怎么显示数字,CASIO学生用计算机显示频右上角上出现FIX 只需教我按键就行了...