目录
用Nginx禁止指定IP、国外IP访问我的网站
①安装 geoip2 扩展依赖:
②下载 ngx_http_geoip2_module 模块:
③解压模块到指定路径
④安装 nginx 模块
⑤下载最新的 IP 地址数据库文件
⑥配置 nginx 配置文件
⑦模拟测试验证
首页 运维 nginx 基于Nginx怎么禁止指定IP、国外IP访问网站

基于Nginx怎么禁止指定IP、国外IP访问网站

May 23, 2023 pm 07:13 PM
nginx ip

    用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并添加模块,只需要编译然后执行make操作。如果执行 make install,新版本的 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、国外IP访问网站

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

    基于Nginx怎么禁止指定IP、国外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、国外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、国外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、国外IP访问网站

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

    基于Nginx怎么禁止指定IP、国外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、国外IP访问网站

    以上是基于Nginx怎么禁止指定IP、国外IP访问网站的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.最佳图形设置
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
    威尔R.E.P.O.有交叉游戏吗?
    1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

    确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

    nginx在windows中怎么配置 nginx在windows中怎么配置 Apr 14, 2025 pm 12:57 PM

    如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

    linux怎么查看nginx是否启动 linux怎么查看nginx是否启动 Apr 14, 2025 pm 12:48 PM

    在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

    linux怎么启动nginx linux怎么启动nginx Apr 14, 2025 pm 12:51 PM

    在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

    怎么解决nginx跨域问题 怎么解决nginx跨域问题 Apr 14, 2025 am 10:15 AM

    解决 Nginx 跨域问题有两种方法:修改跨域响应头:添加指令以允许跨域请求,指定允许的方法和头,以及设置缓存时间。使用 CORS 模块:启用模块并配置 CORS 规则,允许跨域请求、方法、头和设置缓存时间。

    nginx怎么查看运行状态 nginx怎么查看运行状态 Apr 14, 2025 am 11:48 AM

    查看 Nginx 运行状态的方法有:使用 ps 命令查看进程状态;查看 Nginx 配置文件 /etc/nginx/nginx.conf;使用 Nginx 状态模块启用状态端点;使用 Prometheus、Zabbix 或 Nagios 等监控工具。

    怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

    启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

    nginx403怎么解决 nginx403怎么解决 Apr 14, 2025 am 10:33 AM

    如何解决 Nginx 403 Forbidden 错误?检查文件或目录权限;2. 检查 .htaccess 文件;3. 检查 Nginx 配置文件;4. 重启 Nginx。其他可能原因还包括防火墙规则、SELinux 设置或应用程序问题。

    See all articles