服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - 基于Nginx禁止指定IP、国外IP访问我的网站

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

2022-08-07 11:28Resourceful! Nginx

这篇文章主要介绍了用Nginx禁止指定IP、国外IP访问我的网站,想要实现这个功能方法有很多种,这里基于 Nginx 的 ngx_http_geoip2 模块来禁止国外 IP 访问网站,需要的朋友可以参考下

用nginx禁止指定ip、国外ip访问我的网站

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

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

①安装 geoip2 扩展依赖:

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

②下载 ngx_http_geoip2_module 模块:

?
1
2
[ro tmp]#

③解压模块到指定路径

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

?
1
2
3
4
5
6
7
8
[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、国外IP访问我的网站

④安装 nginx 模块

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

下载 nginx 1.18 版本:

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

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

需要注意:

  • 升级 nginx,添加 nginx 模块,只需要编译,然后 make。不需要 make instll,不然线上的 nginx 会被新版本 nginx 完完整整的替换掉。
  • 编译前需要看下 nginx 当前安装了哪些模块。
?
1
2
3
4
5
6
[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

编译安装:

?
1
2
3
4
5
6
7
8
9
10
11
[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 版本,以及安装的模块:

?
1
2
3
4
5
6
[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、国外IP访问我的网站

选择 geolite2 country,点击 download gzip 下载即可:

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

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

?
1
2
3
4
5
6
7
8
[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 配置文件

修改前先备份配置文件:

?
1
2
[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 中添加几行,定义数据库文件位置:

?
1
2
3
4
5
6
7
8
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、国外IP访问我的网站

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

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

?
1
2
3
4
5
if ($allowed_country = yes) {
       # return https://www.baidu.com;
       # return /home/japan;
        return 404;
 }

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

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

?
1
2
3
4
[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、国外IP访问我的网站

可以看到访问网站报错 404 not found:

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

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

?
1
“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、国外IP访问我的网站

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

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

总结

到此这篇关于用nginx禁止指定ip、国外ip访问我的网站的文章就介绍到这了,更多相关nginx禁止国外ip访问网站内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_44866828/article/details/124519559

延伸 · 阅读

精彩推荐
  • NginxNginx大并发优化实战

    Nginx大并发优化实战

    这篇文章主要介绍了Nginx大并发优化实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    baism2372020-01-16
  • Nginxnginx配置二级域名的示例代码

    nginx配置二级域名的示例代码

    这篇文章主要介绍了nginx配置二级域名的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    木子昭4402019-12-26
  • NginxNginx stream 配置代理(Nginx TCP/UDP 负载均衡)

    Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)

    本文主要介绍了Nginx stream 配置代理(Nginx TCP/UDP 负载均衡),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    catoop10422021-11-24
  • NginxCentOS7安装Nginx并配置自动启动的方法步骤

    CentOS7安装Nginx并配置自动启动的方法步骤

    这篇文章主要介绍了CentOS7安装Nginx并配置自动启动的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    挨踢农民工12372019-12-29
  • Nginxnginx rtmp模块编译 arm版本的问题

    nginx rtmp模块编译 arm版本的问题

    这篇文章主要介绍了nginx rtmp模块编译 arm版本的问题,pcre库和libz库都不用单独编译,在编译nginx时添加模块时一起编译,需要的朋友可以参考下...

    原十7232022-01-18
  • Nginxnginx用正则表达式实现泛域名自动匹配目录的方法

    nginx用正则表达式实现泛域名自动匹配目录的方法

    这篇文章主要介绍了nginx用正则表达式实现泛域名自动匹配目录的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需...

    小傻哥4522020-07-21
  • NginxNginx优化配置和内核优化 实现突破十万并发

    Nginx优化配置和内核优化 实现突破十万并发

    Nginx是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文介绍一些Nginx优化代码参数等 ...

    Nginx配置网4462019-10-14
  • Nginx网站出现welcome to nginx怎么办?

    网站出现welcome to nginx怎么办?

    许多小伙伴打开 网站 都会出现 welcome to nginx 这个问题,bsite/production/目录下已经同步了我的项目文件,防火墙配置文件也没有问题,就是太熟悉nodejs自动生...

    服务器之家33692019-09-20