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

news/2024/5/20 13:55:19/文章来源:https://cxyroad.blog.csdn.net/article/details/125252471

5bdb32478f186b57528bfda82fed0951.png

程序员的成长之路

互联网/程序员/技术/资料共享 

关注

阅读本文大概需要 4 分钟。

来自:toutiao.com/i6860736292339057156/

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

想要实现这个功能有很多方法,下面我就来介绍基于 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:

ecdf2add0b768f2e74727f22f9a753fc.png

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

af0174f8ee37793392eed5ffe96a9d31.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;}

0aed502f77930ea8fed30b31d3b29639.png

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

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

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

11ccf779b713e2c324db26e02b8bbe4a.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 是来自于韩国:

066835b26f1cd4f058fb6fc077f23e07.png

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

3eec7b4dd2ec5b27e9f2a930f7dfef85.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”

449b72c33df6ed18f7a8234c0bb6f615.png

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

<END>

推荐阅读:

有了HTTP,为什么还要RPC?

12 个适合做外包项目的开源后台管理系统

互联网初中高级大厂面试题(9个G)
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取!                                  朕已阅

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

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

相关文章

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

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

大型网站架构体系的演变

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

html5网站源码_如何进行高端外贸网站建设

如何进行高端外贸网站建设&#xff1f;如果您熟知外贸市场&#xff0c;那么您会发现很多高端外贸网站建设都是二次开发&#xff0c;主要是利用开源程序。一般来说&#xff0c;这种高端外贸网站建设方式能够使网站的代码更加简洁&#xff0c;而且费用也更加的实惠&#xff0c;所…

ubuntu云服务器网站安装教程,ubuntu云服务器安装教程

ubuntu云服务器安装教程 内容精选换一换将挂载在弹性云服务器中的磁盘卸载。对于挂载在系统盘盘位(也就是/dev/sda或/dev/vda挂载点)上的磁盘&#xff0c;当前仅支持离线卸载。即卸载磁盘时&#xff0c;弹性云服务器需处于“关机”状态。对于挂载在数据盘盘位(非/dev/sda挂载点…

10系统怎么进入服务器,开机无法进入windows10系统_网站服务器运行维护

win7电脑提示当前安全设置会使计算机有风险_网站服务器运行维护win7电脑提示当前安全设置会使计算机有风险的解决方法是&#xff1a;1、首先&#xff0c;打开计算机配置&#xff1b;2、然后&#xff0c;依次打开【管理模板】、【windows组件】、【internet explorer】选项&…

html实现百度换肤,案例实战(二):百度脑图网站换肤

课时1&#xff0c;2&#xff1a;对前四季课程进行了简单的总结&#xff0c;介绍了第五季到第八季 Github 开源之旅系列课程的安排和规划。通过三个案例演示说明了 stylish 是什么。给出了本课程的安排和规划&#xff0c;主要内容是网站换肤原理&#xff0c;工具使用以及 CSS 基…

PHP纯手写正则爬取星座屋网站星座运势数据

星座屋&#xff08;http://www.xzw.com/fortune/&#xff09;运势界面&#xff1a; 最终爬取数据结果展示在APP上的效果&#xff1a; 下面就是使用正则实现的代码&#xff0c;是自己一年多前花了半天时间写的。现在想来&#xff0c;如果使用Scrapy或者phpspider只用几行代码就搞…

web服务器的网站选项,Web服务器配置方法(2)

在IIS中创建Web网站打开“Internet 信息服务管理器”&#xff0c;在目录树的“网站”上单击右键&#xff0c;在右键菜单中选择“新建→网站”&#xff0c;弹出“网站创建向导”&#xff1a;图6图7网站描述就是网站的名字&#xff0c;它会显示在IIS窗口的目录树中&#xff0c;方…

请求的站点不可用或无法找到怎么解决_seo优化怎么做能快速被收录

网站在做seo优化时&#xff0c;不被收录是一件头疼的事&#xff0c;网站不被收录会影响接下来的seo优化工作&#xff0c;无法做关键词优化&#xff0c;但是网站被收录都有一个时间过程&#xff0c;很少有网站秒收录的&#xff0c;快的也需要3-5天时间&#xff0c;怎么样才能快速…

如何清除计算机搜索框内的搜索历史记录,如何清除搜索框中的网站访问历史记录...

本文教你如何防止在网页浏览器地址栏中输入内容时显示匹配结果。记住&#xff0c;Mac 和 iPhone 平台上的 Safari 都不会保留表单数据&#xff0c;所以如果使用 Safari&#xff0c;就不需要担心这个问题。如果你想删除掉浏览历史记录中的所有网站&#xff0c;那就需要清除浏览历…

浅谈Joomla网站优化

2019独角兽企业重金招聘Python工程师标准>>> 选择用Joomla开源系统建设网站的人有很大概率都是看中SEO优化了吧&#xff0c;说到网站搜索引擎优化&#xff0c;它涉及到很多方面&#xff0c;这是一个很复杂的工作。接下来我谈到优化网站时你应该考虑的几项重要因素。…

零基础搭建PHP本地环境并安装WordPress网站(图文指导)...

搭建PHP本地环境前言 以前在大学课堂上学过一点JAVA, PHP. 因为那时是零基础&#xff0c;需要自己搭建APACH, MYSQL, PHPADMIN过程挺烦的&#xff0c;本地环境都不知道是啥&#xff0c;但是做出来结果却很高兴。出来后也做过网站&#xff0c;但是很久不弄就忘记了&#xff0c;我…

LAMP架构搭建网站商城

LAMP架构搭建网站商城LinuxApacheMysql/MariaDBPerl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件&#xff0c;共同组成了一个强大的Web应用程序平台一、安装需要的软件包[rootw-163 ~]# yum install httpdmysql-server mysql php php-mysql -y二、启动LAMP相关服务…