怎么利用 geo 模块将全球 IP 地址精准归类并配合 location 块实现特定国家区域阻断

老伟君_6320

老伟君_6320

2026-06-22

891人浏览

原创

必须使用geoip2模块而非geo模块才能实现全球ip精准归国;需加载geolite2-country.mmdb数据库,通过map定义国家码黑名单,并配合real_ip配置确保真实ip识别。

怎么利用 geo 模块将全球 ip 地址精准归类并配合 location 块实现特定国家区域阻断

直接用 geo 模块无法实现“全球 IP 地址精准归类到国家”,它只支持手动配置 IP 段或 CIDR 范围,不具备自动解析 IP 所属国家的能力。真正能完成这项任务的是 geoip2 模块(非旧版 geo 或已废弃的 http_geoip_module)。下面分三步讲清楚怎么做:

确认用对模块:必须是 geoip2,不是 geo

Geo 模块本质是静态 IP 区间映射工具,比如写死 192.168.1.0/24 internal;,它不连数据库、不查 MaxMind、不识别国家码。而 geoip2 模块加载 GeoLite2-Country.mmdb 后,才能把任意 IPv4/IPv6 地址实时映射为 $geoip2_data_country_code(如 CN、US、RU)。

验证是否启用成功:在 http 块加一个测试 location:

location /geo-test { return 200 "$geoip2_data_country_code\n"; }

用 curl http://your-site/geo-test 返回两位国家码,说明模块工作正常。

在 http 块定义国家码变量与拦截逻辑

所有地理判断必须提前到 http 或 server 级别,避免在 location 中滥用 if。推荐用 map 构建可复用的拦截开关:

堆友AI商品图
堆友AI商品图

堆友AI商品图是一款AI电商图片工具,堆友AI推出AI商品图生成工具。

下载
  • 先加载数据库(路径按实际调整):
geoip2 /www/geoip/GeoLite2-Country.mmdb {
    $geoip2_data_country_code country iso_code;
}
  • 再用 map 定义黑名单状态:
map $geoip2_data_country_code $block_flag {
    default 0;
    "KP" 1;  # 朝鲜
    "SY" 1;  # 叙利亚
    "IQ" 1;  # 伊拉克
}

这个 $block_flag 是布尔型变量,值为 1 时代表需拦截。

在 location 中干净执行阻断

把拦截动作放在具体 location 块里,用最简方式返回 403:

location / {
    if ($block_flag) {
        return 403 "Access denied from your region.";
    }
    # 后续正常 proxy_pass 或 try_files
}

注意:if 在 location 内用于简单变量判断是安全且低开销的,Nginx 官方也未禁止此类用法;但不要在 location 里做复杂逻辑或嵌套条件。

如果要拦截全部路径(包括 API、静态资源、后台入口),建议放在 server 块顶层或使用 rewrite 配合 return 统一处理。

特别注意真实 IP 问题

若 Nginx 前有 CDN 或负载均衡器,$remote_addr 是代理 IP,会导致国家识别全错。必须配置:

  • set_real_ip_from 声明可信代理网段(如 Cloudflare、阿里云 SLB 的 IP 段)
  • real_ip_header X-Forwarded-For 或 X-Real-IP(依你前端实际 header 名)
  • 确保 geoip2 指令中 source=$remote_addr 改为 source=$realip_remote_addr(部分版本需显式指定)

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

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

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

900

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2772

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

936

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

829

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2516

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4652

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

747

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习