京东一面:Nginx 禁止国外 IP 访问网站!

news/2024/5/20 14:16:13/文章来源:https://blog.csdn.net/woniu211111/article/details/125307995

点击上方蓝色字体,选择“标星公众号

优质文章,第一时间送达

来源:toutiao.com/i6860736292339057156

先来说说为啥要写这篇文章,之前小编看了下nginx 的访问日志,发现每天有好多国外的IP地址来访问我的网站,并且访问的内容基本上都是恶意的。因此 我决定 禁止国外IP 来访问我的网站

想要实现这个功能有很多方法,下面我就来介绍基于 NGINX的ngx_http_geoip2模块 来禁止国外IP 访问网站

一、安装geoip2扩展依赖

[root@ddkk ~]# yum install libmaxminddb-devel -y

二、下载ngx_http_geoip2_module模块

[root@ddkk tmp]#  git clone https://github.com/leev/ngx_http_geoip2_module.git
[ro tmp]#

三、解压模块到指定路径

我这里解压到/usr/local 目录下

e8aea455445716d0efedfb2f9374131c.png

四、安装nginx 模块

首先说明下环境,我的nginx 版本是 1.16 , 在网上查了下 安装 ngx_http_geoip2 模块至少需要 1.18 版本及以上,因此此次安装我是 升级nginx1.18,添加 ngx_http_geoip2 模块。

下载nginx 1.18 版本

[root@ddkk tmp]# wget http://nginx.org/download/nginx-1.18.0.tar.gz

解压nginx1.18 软件包并 升级为 nginx1.18 ,添加 ngx_http_geoip2 模块

需要注意:

1、升级nginx, 添加nginx 模块 只需要 编译 然后 make 不需要 make instll 不然线上的nginx 会被新版本nginx 完完整整的替换掉

2、编译前 需要看下 nginx 当前安装了哪些模块

[root@ddkk tmp]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.16.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure arguments: --with-http_stub_status_module --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-stream

编译安装

[root@ddkk tmp]# tar -xf nginx-1.18.0.tar.gz 
[root@ddkk tmp]# cd nginx-1.18.0/
[root@ddkk nginx-1.18.0]# ./configure --with-http_stub_status_module \--prefix=/usr/local/nginx \--user=nginx --group=nginx --with-http_ssl_module --with-stream \--add-module=/usr/local/ngx_http_geoip2_module
[root@ddkk nginx-1.18.0]# make
[root@ddkk nginx-1.18.0]# cp /usr/loca/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx1.16    #备份
[root@ddkk nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/    #用新的去覆盖旧的
[root@ddkk nginx-1.18.0]# pkill nginx     #杀死nginx
[root@ddkk nginx-1.18.0]# /usr/local/nginx/sbin/nginx    #再次启动Nginx

查看nginx 版本 以及安装的模块

[root@ddkk nginx-1.18.0]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.18.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)built with OpenSSL 1.0.2k-fips 26 Jan 2017TLS SNI support enabledconfigure arguments: --with-http_stub_status_module --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-stream **--add-module=/usr/local/ngx_http_geoip2_module**

五、下载最新的IP地址数据库文件

模块安装成功后,还要在 Nginx 里指定数据库,在安装运行库时默认安装了两个,位于 /usr/share/GeoIP/ 目录下,一个只有 IPv4,一个包含 IPv4 和 IPv6:

登录www.maxmind.com 网址,创建账户 下载最新的库文件(账户创建就不演示了)

点击左侧 ,Download Files

c0c8f5c6b48d8472c66372973e561088.png 通过Nginx来实现禁止国外IP访问网站

选择GeoLite2 Country ,点击 Download GZIP 下载即可

30ec5104b801515e06135b6c745d5093.png 通过Nginx来实现禁止国外IP访问网站

上传到 /usr/share/GeoIP/ 下并解压

d9b04262f30c34bcdef3fbe754f97673.png

六、配置nginx 配置文件

修改前 先备份配置文件

[root@ddkk ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak[root@ddkk ~]# vim /usr/local/nginx/conf/nginx.conf

在http 中添加 几行,定义数据库文件位置

geoip2 /usr/share/GeoIP/GeoLite2-City.mmdb {
auto_reload 5m;
$geoip2_data_country_code country iso_code;
}map $geoip2_data_country_code $allowed_country {default yes;CN no;
}

d321ed85f6aa134319476f720b0271d4.png 通过Nginx来实现禁止国外IP访问网站

在server 中的 location 下 添加 条件

如果满足IP 是国外IP 就 执行下面的return 动作,我这里定义了3种, 注释了其中两个。

当访问IP 是国外IP ,直接返回404

if ($allowed_country = yes) {# return https://www.baidu.com;# return /home/japan;return 404;}

fb2f8362704894d005d479c0f4bb1334.png 通过Nginx来实现禁止国外IP访问网站

修改完毕后, 检测下配置文件,重新加载下 nginx

[root@ddkk ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[roo@ddkk ~]# /usr/local/nginx/sbin/nginx -s reload

7、模拟测试验证

使用海外节点的服务器去访问网站

这里我的IP 是 来自于韩国

defbb379cc39ba08ea736681e093bb5a.png 通过Nginx来实现禁止国外IP访问网站

可以看到访问网站报错 404 Not Found

10e79d4b879c3639496d14e2c9b90c8f.png

通过Nginx来实现禁止国外IP访问网站

我们再来看下nginx 的访问日志

"13.125.1.194 - - [14/Aug/2020:16:15:51 +0800] "GET /favicon.ico HTTP/1.1" **404** 548 "https://www.ddkknj.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"通过Nginx来实现禁止国外IP访问网站

到此我们通过Nginx来实现禁止国外IP访问网站 就结束了

【热门内容】

求求你别再手动部署jar包了,太low了!

面试官:1亿条数据批量插入 MySQL,哪种方式最快?

彻底告别Controller、Service、Dao等方法

IDEA 官宣全新默认 UI,太震撼了!

Spring Boot 启动时自动执行代码的几种方式

Linux 新系统正式发布,易用性开始向 Windows 看齐!

再见了VMware,一款更轻量级的虚拟机!

SpringBoot三大开发工具,你都用过么?

300多本程序员经典技术书籍高清PDF
加我微信,备注:资料扫码备注:资料,自动获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_720293.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

织梦配置html,织梦网站后台的基本设置

网站搭建完成之后,后台的一些基本设置必不可少,同时还要考虑到一些SEO方面的设置,这也是基础优化的开始。1、站点设置点击左侧的【系统】→【系统基本参数】站点根网址为:http://127.0.0.1文档HTML默认保存路径的/a,去…

描述标签(meta description)的规范讲解 - 谷歌SEO基础

每个项目产品都会让你加埋点,你是愿意花几天一个个加,还是愿意几分钟一个小时加完去喝茶聊天?来试试这520web工具, 高效加埋点,目前我们公司100号前端都在用,因为很好用,所以很自然普及开来了,推…

python官网上不去了_学习Python你不去8个网站?逗我呢!

作为一个现时代的程序员初学者,除了看书之外,互联网的学习手段也是断不能少的! 以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能! ​0.国外的大神GitHub : ​学习Python必去的8个网…

更新网站 图片缓存_助你网站加速的十个小技巧

网页的响应速度和性能对用户体验非常重要。如果你的网站太慢,你不仅会失去访问者,还会失去潜在的客户。像谷歌这样的搜索引擎在搜索排名中将网站的速度考虑在内,所以当优化你的网站速度时,你应该把一切都考虑进去。每一毫秒都很重…

图片网站源码_轻量必应每日一图HTML源码

源码介绍: 众所周知,必应搜索官网每天会更新一张高质量的背景图。许多同学想在接口中调用它们,但必应的服务器在国内不算特别稳定(>500ms)。Bing-upyun 可以把每天的必应图片上传至又拍云,提供支持图片处理、回溯的接口(又拍云直链&#x…

注入岛国网站,技术菜鸟第一次....

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2.8 分钟。作者:panda原文地址:https://forum.90sec.com/t/topic/13161.打开了谷歌hack 数据库2.在谷歌中漫步,看到几个?idXXX结尾的网址,加’ 出现报错&…

这个小学生,竟然把学校的网站搞了!

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:编程技术宇宙今天这篇文章来源于知乎上一个叫Ret2Rttr的分享,作者自称是一名六年级的小学生。文章主要记录的是他针对自己学校网站的一次渗透测试,过程非常有…

利用 Github Pages 和 Hugo 快速搭建免费的个人网站

点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!你有个人网站吗?在自媒体时代,人人都在不断向互联网等不同媒介输出内容,如:博客、微博以及抖音等,并在特定领…

强力推荐,SpringBoot + Vue + MyBatis 音乐网站项目

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2.8 分钟。来自:网络项目说明本音乐网站的客户端和管理端使用 VUE 框架来实现,服务端使用 Spring Boot MyBatis 来实现,数据库使用了 MySQL。项目功能音乐播放用户登录注…

京东一面,面试官问我如何用 Nginx 禁止国外 IP 访问网站,我直接凉凉!

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:toutiao.com/i6860736292339057156/之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定…

因致力于保护用户隐私,曾经最好用的浏览器正在被大批网站抛弃

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 5.5 分钟。来自:电脑报一直以来,Chrome浏览器都是世界上公认的最受欢迎的浏览器,而火狐 Firefox 作为和Chrome、Edge(IE)相提并论的三大浏览器之一…

大型网站架构体系的演变

互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。本文上篇将主要介绍大型网站基础架构的扩展&#xff0…

网站服务器数据库关系图,网站服务器数据库关系图

网站服务器数据库关系图 内容精选换一换使用华为云服务来完成部署,服务器计算资源使用ECS或者BMS,存储使用EVS与SFS。在华为云上一个典型的SAP系统部署架构如图1所示,无论是全新部署还是迁移上华为云,部署架构都与此类似。更多特性…

卸载再重装php致使网站502,调试php时网站出现502的解决方法-Go语言中文社区

这是第二次遇到该问题了,上次解决后因为没有记录,结果这次遇到后又得重新查找解决方法。记忆力严重减退了啊,还是要保持边学边记录的习惯网站在正常运行时是没有问题的,但是在使用xdebug进行远程调试时,可能会因为单步…

html语义化有利于seo,HTML5新增元素属性及语义化标签+对搜索引擎的影响

html标签语义化首先是关于语义(Semantics)和默认样式的区别,默认样式是浏览器设定的一些常用tag的表现形式,语义化的主要目的就是让大家直观的认识标签(markup)和属性(attribute)的用途和作用,很明显Hx系列看起来很像标题,因为拥有…

一个网站部署的完整流程(包教包会)

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 7 分钟。来自:blog.csdn.net/Jekin_KE/article/details/87312623有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上,让别人观摩观摩。可无奈技术有限,对…

网站都变成灰色了,如何快速实现?看这两种方法!

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2.8 分钟。来自:https://blog.csdn.net/YOUYOU0710/article/details/105350655有些时候我们需要把网站页面变成黑白色或灰色,特别是对于一些需要悼念的日子,以及一些影响力…

个人网站总被攻击?写个自动封禁IP的脚本给你!

程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 2 分钟。来自:blog.csdn.net/qq_38925100/article/details/1237424631.在ngnix的conf目录下创建一个blockip.conf文件2.里面放需要封禁的IP,格式如下deny 1.2.3.4;3.在ngnix的HTTP的配…

大型网站架构演进(5)数据库读写分离

在使用缓存后,使大部分的数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(包括未命中缓存的,和缓存过期的)和全部的写操作需要访问数据库,当网站的访问量继续增加后,数据库会因为负载压力过高导致成为…