Nginx配置之禁止指定IP访问


Posted in Servers onMay 02, 2022

用Nginx禁止指定IP、国外IP访问我的网站

 

Nginx配置之禁止指定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配置之禁止指定IP访问

④安装 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 -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure 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 -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure 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:

Nginx配置之禁止指定IP访问

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

Nginx配置之禁止指定IP访问

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

[root@fxkj local]# cd /usr/share/GeoIP/
[root@fxkj GeoIP]# ll
total 69612
lrwxrwxrwx. 1 root root       17 Mar  7  2019 GeoIP.dat -> GeoIP-initial.dat
-rw-r--r--. 1 root root  1242574 Oct 30  2018 GeoIP-initial.dat
lrwxrwxrwx. 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;
}

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

Nginx配置之禁止指定IP访问

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

[root@fxkj ~]# /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@fxkj ~]# /usr/local/nginx/sbin/nginx -s reload

⑦模拟测试验证

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

Nginx配置之禁止指定IP访问

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

Nginx配置之禁止指定IP访问

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

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

Nginx配置之禁止指定IP访问

总结

到此这篇关于用Nginx禁止指定IP、国外IP访问我的网站的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
nginx 设置多个站跨域
Mar 09 Servers
Nginx优化服务之网页压缩的实现方法
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
Nginx工作模式及代理配置的使用细节
Mar 21 Servers
Nginx虚拟主机的配置步骤过程全解
Mar 31 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
OpenStack虚拟机快照和增量备份实现方法
Apr 04 Servers
nginx lua 操作 mysql
May 15 Servers
CentOS7安装MySQL8的超级详细教程(无坑!)
Jun 10 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
Jul 07 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
centos7安装mysql5.7经验记录
May 02 #Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 #Servers
搭建Yolov5服务器
KVM基础命令详解
Apr 30 #Servers
Win10 Anaconda安装python-pcl
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 #Servers
解决IIS7下无法绑定https主机的问题
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
php mysql索引问题
2008/06/07 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
python的类变量和成员变量用法实例教程
2014/08/25 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
人事助理岗位职责
2013/11/18 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
改革共识倡议书
2014/08/29 职场文书
正规欠条模板
2015/07/03 职场文书
Python的这些库,你知道多少?
2021/06/09 Python
详解Python中下划线的5种含义
2021/07/15 Python
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技