你已选中了添加链接的内容点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

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

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

  • RPC 框架 Dubbo 源码解析

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

  • 消息中间件 RocketMQ 源码解析

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

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

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

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:toutiao.com/i6860736292339057156/

  • ①安装 geoip2 扩展依赖:

  • ②下载 ngx_http_geoip2_module 模块:

  • ③解压模块到指定路径

  • ④安装 nginx 模块

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

  • ⑦模拟测试验证


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

图片来自 Pexels

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

①安装 geoip2 扩展依赖:

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

②下载 ngx_http_geoip2_module 模块:

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

③解压模块到指定路径

我这里解压到 /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:

图片

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

图片

上传到 /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;}

图片

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

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

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

图片

修改完毕后,检测下配置文件,重新加载下 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 是来自于韩国:

图片

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

图片

我们再来看下 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”

图片

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

- END -



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

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

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

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

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

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

用 Nginx 禁止国外 IP 访问我的网站...相关推荐

  1. 用 Nginx 禁止国外 IP 访问我的网站....

    点击关注公众号,实用技术文章及时了解   作者:运维小弟   www.toutiao.com/i6860736292339057156 前言 先来说说为啥要写这篇文章,之前小编看了下nginx 的访问 ...

  2. 用Nginx禁止国外IP访问我的网站...

    点击上方蓝色"终端研发部",选择"设为星标" 学最好的别人,做最好的我们 作者:运维小弟 出处:toutiao.com/i6860736292339057156 ...

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

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 4 分钟. 来自:toutiao.com/i6860736292339057156/ 之前看了下 Nginx 的访问日志,发现 ...

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

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 来源:toutiao.com/i6860736292339057156 先来说说为啥要写这篇文章,之前小编看了下ngi ...

  5. 如何用 Nginx 禁止国外 IP 访问网站!

    之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的.因此我决定禁止国外 IP 来访问我的网站. 想要实现这个功能有很多方法,下面我就来介 ...

  6. nginx禁止国外IP访问网站

    一.安装 geoip2 扩展依赖 [root@localhost ~]# yum install libmaxminddb-devel -y 二.下载 ngx_http_geoip2_module 模 ...

  7. Kong实现禁止国外IP访问

    一.需求背景 最近公司观察到某些国外IP或者非中国大陆IP有扫描访问记录,出于业务安全考虑,公司的业务只对中国大陆进行开展,所以需要禁止国外IP访问,增加系统安全性.同时也避免某些黑产通过国外代理IP ...

  8. Nginx 禁止某 IP 访问

    导语 总有一些不怀好意的人来访问我的网站,而且频率还很高,所以就用简单的方式禁止访问,就用 Nginx 来实现. 创建黑名单 在 /usr/local/nginx/conf 目录下创建 blocksi ...

  9. php禁止国外访问,wordpress 禁止国外ip访问

    一般做国内站,国外ip都是来攻击或撞库的,没有国外用户的需求,就可以在进入网站时进行ip检查,如果是国外ip就禁止访问 阿里提供了一个查询ip归属的接口,可以用来获取当前ip的真实地址,但对访问速度会 ...

最新文章

  1. 硕士,博士太多了?看完这组数据你就不那么认为了!
  2. 常用的异常检测算法有哪些?
  3. 没有绿幕,AI也能完美视频抠图,发丝毕现,毫无违和感 | CVPR
  4. Android之自定义Adapter的ListView
  5. atlas mysql 读写分离_MySQL读写分离工具Atlas
  6. java.lang.NoClassDefFoundError
  7. python map、filter、reduce
  8. 刑事科学技术专业与计算机专业,辽宁警察学院刑事科学技术专业
  9. Jquery的jqzoom插件的使用(图片放大镜)
  10. 问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势
  11. mybatis官方文档知识点梳理
  12. 向mysql中导入数据库文件
  13. as几个常用模拟器连接命令
  14. MATLAB 棋类小游戏合集(围棋,六子棋,走四棋,九子棋,含禁手五子棋等等)
  15. Tomcat调优技巧
  16. Win11切换桌面快捷键
  17. 国科大《模式识别》课程总结
  18. 通过跳绳瘦下来是一种怎么样的体验?
  19. python计算坡度_基于python实现利用DEM数据计算坡度、坡向
  20. 新套路+老配方 | 2023年网络钓鱼攻击新方式

热门文章

  1. 2022年「博客之星」参赛博主:hyk今天写算法了吗
  2. 解决办法:error: failed to push some refs to 'https://github.com/xxxx.git'
  3. 大数据工程师干不过35岁?大数据职业发展前景如何?
  4. python爬虫遇到验证码的处理方法(以爬取中国执行信息公开网为例)
  5. 【线下赛游记】2023 ICPC西安邀请赛 游记
  6. 企业如何做好电子邮件营销?做好这4点,客户回头率高!
  7. python程序设计重点_Python程序设计
  8. [云数据中心] 《云数据中心网络架构与技术》读书笔记 第七章 构建多数据中心网络(2/3)
  9. 【LaTex】LaTex 极简安装教程
  10. MATLAB中detrend函数使用