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

news/2024/5/17 19:04:30/文章来源:https://blog.csdn.net/weixin_44421461/article/details/125342422

点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

每天 14:00 更新文章,每天掉亿点点头发...

源码精品专栏

 
  • 原创 | Java 2021 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:toutiao.com/

i6860736292339057156/

  • ①安装 geoip2 扩展依赖:

  • ②下载 ngx_http_geoip2_module 模块:

  • ③解压模块到指定路径

  • ④安装 nginx 模块

  • ⑤下载最新的 IP 地址数据库文件

  • ⑦模拟测试验证

2aa828ab37740f71b76a0ae444ab8a90.png


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

067c7cb5f4e06d300e7f82949213c765.png
图片来自 Pexels

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

①安装 geoip2 扩展依赖:

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

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

②下载 ngx_http_geoip2_module 模块:

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

基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。

项目地址:https://github.com/YunaiV/onemall

③解压模块到指定路径

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

[root@fxkj tmp]# mv ngx_http_geoip2_module/ /usr/local/[root@fxkj local]# ll ngx_http_geoip2_module/total 60-rw-r--r-- 1 root root  1199 Aug 13 17:20 config-rw-r--r-- 1 root root  1311 Aug 13 17:20 LICENSE-rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c-rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c-rw-r--r-- 1 root root  3640 Aug 13 17:20 README.md

④安装 nginx 模块

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

下载 nginx 1.18 版本:

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

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

需要注意:

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

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

[root@fxkj tmp]# /usr/local/nginx/sbin/nginx -Vnginx 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@fxkj tmp]# tar -xf nginx-1.18.0.tar.gz[root@fxkj tmp]# cd nginx-1.18.0/[root@fxkj 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@fxkj nginx-1.18.0]# make[root@fxkj nginx-1.18.0]# cp /usr/loca/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx1.16    #备份[root@fxkj nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/    #用新的去覆盖旧的[root@fxkj nginx-1.18.0]# pkill nginx     #杀死nginx[root@fxkj nginx-1.18.0]# /usr/local/nginx/sbin/nginx    #再次启动Nginx

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

[root@fxkj nginx-1.18.0]# /usr/local/nginx/sbin/nginx -Vnginx 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:

725af005c23f717864e8625a4860708c.png

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

5d7165e6e583cb6f5fbe97dc3b8ea2ee.png

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

[root@fxkj local]# cd /usr/share/GeoIP/[root@fxkj GeoIP]# lltotal 69612lrwxrwxrwx. 1 root root       17 Mar  7  2019 GeoIP.dat -> GeoIP-initial.dat-rw-r--r--. 1 root root  1242574 Oct 30  2018 GeoIP-initial.datlrwxrwxrwx. 1 root root       19 Mar  7  2019 GeoIPv6.dat -> GeoIPv6-initial.dat-rw-r--r--. 1 root root  2322773 Oct 30  2018 GeoIPv6-initial.dat-rw-r--r--  1 root root  3981623 Aug 12 02:37 GeoLite2-Country.mmdb

⑥配置 nginx 配置文件

修改前先备份配置文件:

[root@fxkj ~]# cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf-bak[root@fxkj ~]# 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;}
9523bea43d8462e32afc1fb119076796.png

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

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

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

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

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

⑦模拟测试验证

使用海外节点的服务器去访问网站,这里我的 IP 是来自于韩国:

8499d70a1085f54960e43c44f62e3740.png

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

2e1041011c4b5922c0994beec0c2a3aa.png

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

“13.125.1.194 – – [14/Aug/2020:16:15:51 +0800] “GET /favicon.ico HTTP/1.1” 404 548 “https://www.fxkjnj.com/” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36”
397eb5d8259e8582335148380ba301eb.png

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



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

5a497436e8391cb5f14905eeb51cab0b.png

已在知识星球更新源码解析如下:

a4badbdeea888099e998a04f7c380f8a.png

bd0bfb1a0ac79a9c2b871f939903d0ab.png

eb4c90e87217cdc8e8ddbe24979697ea.png

7919b8848a4304c2c62088b0dfbe0e23.png

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)

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

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

相关文章

Slog50_支配vue框架初阶项目之博客网站-单页-客户端(浏览器)更新头像2

ArthurSlogSLog-50Year1GuangzhouChinaAug 26th 2018GitHub掘金主页简书主页segmentfault要成就一番事业 既要靠本事上位 又得懂拉拢站队 开发环境MacOS(High Sierra 10.13.5) 需要的信息和信息源: 统一资源定位符(URL)XMLHttpRequestvue模版语法 v-bindFormDataFor…

使用Apache服务部署静态网站

使用Apache服务部署静态网站 1.网站服务程序Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。Apache程序是目前拥有很高市场占有率的Web服务程序之一,其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。Apache也是RHEL…

基于SpringBoot+MyBatis+Vue的音乐网站

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!每天 14:00 更新文章,每天掉亿点点头发...源码精品专栏 原创 | Java 2021 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框…

使用VS2012开发的网站或者webservice在IIS6.0上发布的注意事项

由于新版的VS2012的出现,很多人转而使用VS2012作为开发工具,微软每次新的版本都会新增一些功能,带给我们不少的惊喜,但是在VS2012或者VS2010下开发的网站或者webservice在部署时要注意了,由于VS2010以上版本的.net fra…

流量排名前一千万网站,三分之一使用 WordPress

WordPress 在官博发文,庆祝它在流量排名前一千万网站中的市场占有率达到了三分之一。据 W3Techs 的数据,WordPress 在前一千万网站的市场份额从一年前的 29.9% 上升到了现在的 33.4%。WordPress 表示对此非常自豪。 作为开源内容管理系统的 WordPress&am…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能,通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

30个免费下载高质量精美照片素材的网站(转)

在设计中使用免费的照片素材可以节省大量的时间。网络有有很多分享照片资源的网站,有些是免费的,有些则需要付费,当你在设计中使用网上的照片素材的时候要注意使用协议以免带来麻烦。今天这篇文章向大家推荐30个国外的免费下载高质量精美图片…

html显示日志_seo优化的网站日志分析

网站日志相信这个名词,站长们不知道。大多数站长只知道网站日志的概念,不知道网站日志的分析。其实网站日志的分析也是一个很重要的SEO话题。网站日志应该说每个站长都要懂得分析,这是每个站长必备的技术。要知道网站日志的分析方法&#xff…

php开发小说数据问题,小说类网站开发之创建数据库与建立数据表

php开发后端中最重要的一个环节就是创建数据库与建立数据表,因为他和整个项目都有直接的关系,所以,我们首先建立几个数据表,为后面写程序垫下基础首先我们先去建立数据库文章然后查询数据库这里我们写的是小说站,我就建…

linux c多进程多线程,等待进程 - Linux C进程与多线程入门_Linux编程_Linux公社-Linux系统门户网站...

问题在创建进程这一节内容中,我们看到,消息的输出是父子进程交替输出,且父进程在子进程之前结束。如果要安排父进程在子进程结束之后才结束。可以调用wait函数。函数说明pid_t wait(int * stat_loc)包含的头文件: #include #include 返回值&a…

有哪些网站是django开发的_想要定制开发下单网站需要准备哪些内容?

引言:企业对外推广少不了要有一个形象网站,如果不能通过模板网站满足企业建站需求,大多数情况下是需要定制开发网站的。想要定制开发网站或设计定制网站,都需要准备什么呢?网慧科技小编帮您捋清这4个问题可以避免晕头转…

6页面跳转_SEO优化的高级玩法,半年权重6,日均流量过万!

老老实实做内容,发现竟然抵不过seoer的高级玩法。我只能说给大神跪了。这个玩法是真实可操作的,是一个朋友在请教我一个seo问题的时候,给我发了一个网站,让我分析分析,然后本着钻研的精神,研究了那个网站的…

换服务器影响网站排名,网站更换服务器空间会影响排名吗

做seo的都知道,网站空间不稳定会影响SEO优化的效果,因为会降低搜索引擎对于网站的信任度判断,特别是最近使用香港空间的网站,会经常性遇到网站无法打开,或者打开速度非常慢,为了彻底解决稳定问题&#xff0…

网站服务器接收数据,科学网—TCP服务器接收数据 - 杨杭的博文

1.在pycharm中编写如下服务器端代码import structfrom socket import *#创建套接字s socket(AF_INET, SOCK_STREAM)#绑定端口HOST1********* #需要指定服务器IP地址PORT8080s.bind((,8089)) #绑定的是本机,端口为8089s.listen()#接收客户端的连接client_socket, cl…

64位虚拟机下asm()语法_2.0正式版系统使用宝塔虚拟机建站

本教程适用于树莓派爱好者基地64位系统2.0正式版使用,1.0正式版使用宝塔虚拟机的教程在前面已经发了,请根据自己使用的系统选择相应的教程!本教程教大家使用宝塔虚拟机,大大降低大家在树莓派上面建站的难度!&#xff0…

wordpress是php文件路径,wordpress怎么输出网站文件路径

WordPress获取网站相关文件路径可以通过相关的函数来获取和输出。WordPress中可以通过相关函数获取站点路径、主题文件路径、插件文件路径等。具体输出路径方法如下:站点路径相关函数home_url()返回站点路径,相当于后台设置->常规中的”站点地址(URL)…

nginx访问服务器响应慢_网站访问慢?不要让你的网站输在服务器上

建网站如果把域名看做是地址、那么网站的服务器(空间)就是一套房子,既然是一套房子,那就有很多方面的讲究如:地段、户型、朝向、面积、开发商、物业、配套设施等等。服务器(空间)也是一样,有CPU、内存、带宽、机房、安全维护、服务…

nofollow标签_nofollow标签对于网站优化有什么作用?

nofollow标签对于网站优化有什么作用?我们经常面临站内链接处理问题,因为有些优化价值小的页面会分散网站权重,我们要直接取消掉此链接,就会导致用户体验变差,要保留就会被继续分权,网站排名上升也会慢很多…

linux 查看内核是否转发_Linux 中实用的 4种 shell 脚本查看网站是否正常

linux系统运维过程中,经常会遇到些问题,有时候问题会比较麻烦,此时shell脚本的优势就体现出来,下面我来介绍几种查看网站是否正常的shell脚本。文内含长段代码可复制可往左滑,希望对大家有帮助!其一#!/bin/…

网站刷关键词_正规的首页关键词排名方法是什么?如何收费的?

现在几乎每个企业都是线上线下共同运营的,但是移动互联网的竞争激烈,需要使用有效的手段来 获得更好的运营状态。而关键词优化是目前符合用户及企业的有力工具,用户用关键词来快速找到自己想要的,企业用关键词来获得靠前的排名&am…