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

news/2024/5/10 0:39:46/文章来源:https://blog.csdn.net/qq_36189144/article/details/118165999

来源: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:

选择 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 访问网站就结束了~

回复「进群」即可进入无广告技术交流群。同时送上250本电子书+学习视频作为见面 
有你想看的精彩 抖音服务器带宽有多大,为什么能够供那么多人同时刷?
从零开始搭建创业公司后台技术栈
牛逼!JetBrains 又出了一款编程神器!协同编程!
为什么程序员 996 会猝死,而老板 007 却不会?
上架 Steam 一周的付费游戏,在 GitHub 开源了!
这个 Spring 问题把我问懵了
腾讯最大股东收购了 Stack Overflow,以后“抄代码”都要付费了么?
刚刚用鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生了....
目前5000+ 人已关注加入我们

点赞和在看就是最大的支持❤️

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

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

相关文章

怎样给一个php网站搬家

PHP网站分为网站程序和数据库两部分,因此搬家时要分2部分考虑:一是程序,二是数据。 程序部分: 比如旧空间是discuz3.4版本,那么新空间也要安装一个全新的discuz3.4版本。注意版本要一致,后期导入数据库才不…

洛奇英雄传老福单机版服务器不显示,洛奇英雄传:永恒官方网站-这一次让经典成为永恒...

公会教学:玩法套路全领悟2017年02月27日今天跟大家分享下《洛英:永恒》的公会玩法,一个决定了在游戏里是当一个万人敬仰的大佬还是一条躺尸的咸鱼的玩法。小伙伴们等级到达十一级之后,游戏就会开启公会玩法了。此时大家会面临两个…

基于django的视频点播网站开发-step14-数据总览功能

数据总览功能,是对网站中产生的数据进行一个统计,统计出视频数、发布数、用户数、评论数,等等。让管理者对网站数据有一个清晰的认识,做到心中有数。 在本站中,笔者一共列举了下面几种数据:视频数、发布中未…

小浩算法网站上线啦!

小浩算法的配套学习网站上线了,虽然还很简陋,虽然内容还没有完全整编进去,虽然还没对每道题目都加上各语言的代码。但是,我还是让它上线啦。http://www.geekxh.com这不是我第一次做网站了,好多年前就用 WordPress 搭建…

全宇宙著名网站中使用的编程语言

为什么80%的码农都做不了架构师?>>> 全宇宙最流行也就是访问巨大的网站有个共同之处,那就是动态的网站。下面看看这些宇宙之最网站所使用的编程语言: 转载于:https://my.oschina.net/766/blog/211248

如何制作出吸引潜在用户的网站?

我们都知道企业建网站目的得到更多的潜在用户,那么现在建出企业需求的、吸引潜在用户的网站呢? 下面搜客建站就来和大家说说:如何制作出吸引潜在用户的网站? 一、网站页面的风格设计 设计网站就好比我们平时评论一个女人美不美…

网站软件开发规范(某门户网站的)

网站软件开发规范(某门户网站的) --------------------------------------------------------------------------------1数据库使用规范1.1服务器上有关数据库的一切操作只能由服务器管理人员进行。1.2程序中访问数据库时使用统一的用户、统一的连接文件访问数据库。1.3原则上…

【前端】低版本IE浏览器访问网站一片空白

最近在客户那里,发现一个奇葩的问题,系统上IE浏览器访问网站一片空白,显示无法访问。 但是相同的网站系统,在我们的电脑上又可以访问且IE浏览器版本相同,没法只有,装虚拟模拟客户环境复现一下了。 发现在客…

DNS与网站访问流程

1:dns与网址url简介 DNS是域名系统(DomainNameSystem)的缩写,域名系统是一中庞大而复杂的系统,但我们这里讲解重心并不是这个系统,而是指本地电脑dns是什么 讲到dns,我们就不得不讲讲网址和域名,我们经常会…

Apache网站的概述

一:Web服务概述 在Internet应用中,Web服务无疑是最为主流的应用系统,有了web站点,企业可以充分展示自己的产品,公司,宣传自己的企业形象,提供各种网上交流,业务平台,电子…

Apache网站的部署

一:Apache部署 方法一: https://www.apache.org/在网站 https://www.apache.org/ 中下载软件包 点击download 下载 找到httpd-2.4.46.tar.gz,右键复制链接 wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.gz …

四:Tomcat自定义默认网站目录

1&#xff1a;自定义默认网站目录 《1》&#xff1a; mkdir -pv /web/webapp 创建 《2》&#xff1a; vim /web/webapp/index.jsp 编写文件 《3》&#xff1a;写入&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF…

GitHub代下载(文件加速)网站列表

本文作者: 峡州仙士 原文链接: https://cjh0613.github.io/blog/githubproxy.html 声明: 如文章有更新&#xff0c;将先在本网站&#xff08;峡州仙士之页&#xff09;发布&#xff01;&#xff08;可百度&#xff09;| 本网站所有文章除特别声明外&#xff0c;均采用 BY-NC-SA…

您与所提供的网站有什么关系? 告诉我们一些关于您的业务的情况。

您与所提供的网站有什么关系? 告诉我们一些关于您的业务的情况。谁是您的客户&#xff0c;他们为您支付了什么&#xff1f;这两个怎么填? 老是说无效文本&#xff1f; 答&#xff1a;很多朋友在注册payoneer账户的时候&#xff0c;资金入账前&#xff0c;填写全球支付服务问…

网站首页 - 导航条和轮播图的实现(bootstrap)

效果图: Bootstrap: 组件 (静态CSS) JS插件(动态JS) 反色导航条: 基本都是去bootstrap官网(组件-导航条)复制过来, 改一改文字內容即可. bootstrap可参考: https://blog.csdn.net/qq_42986107/article/details/82929465 <!-- 反色导航条组件 --> <nav class"n…

建站环境学习一:宝塔面板安装

建站环境学习一&#xff1a;宝塔面板安装 安装宝塔面板的原因是因为方便&#xff0c;简单&#xff0c;一键配置的网络环境&#xff0c;安装只要用下面的链接&#xff08;看版本&#xff09;下载&#xff0c;教程慢慢更新 Debain的&#xff1a; wget -O install.sh http://do…

建站学习二:宝塔面板环境安装

建站学习二&#xff1a;宝塔面板环境安装 按照建站学习一 https://blog.csdn.net/yichurou2981/article/details/82315926 登录后&#xff0c;会出现以下界面&#xff0c;可以按照默认的安装&#xff0c;nginx比较小&#xff0c;适合内存不大的机&#xff0c;apache比较占资…

建站学习三:一键搭建博客

建站学习三&#xff1a;一键搭建博客 之前弄好了宝塔面板还有建站所需要的环境&#xff08;没弄的请先看前面的文章&#xff09;&#xff0c;那么你就可以自己申请或购买一个域名&#xff0c;搭建属于自己的站。宝塔里面有选择&#xff0c;如下图&#xff1a; 1、点开宝塔面板…

如何屏蔽指定的网站

1.打开我的计算机&#xff0c;在地址栏输人C:\Windows\System32\drivers\etc&#xff0c;如图: 2.复制hosts文件到桌面&#xff0c;用文本编辑器打开&#xff0c;在最后一行加上127.0.0.1 www.baidu.com 3.文件—>保存&#xff0c;然后复制到C:\Windows\System32\drivers\et…

使用什么优化器_百度快照是什么?做SEO优化如何使用百度快照?

用户会因一个趣味的视频、高质量的内容停下脚步&#xff0c;也会因为一个链接的缓冲速度快而放慢关闭的窗口......所以&#xff0c;在一个网站的运营过程中&#xff0c;会有太多的因素影响到网站人流量情况。同时&#xff0c;网站打开速度缓慢&#xff0c;不仅会影响到用户的停…