nginx的docker镜像封禁地区IP的实现

 更新时间:2026年04月30日 08:54:01   作者:FinelyYang  
这篇文章主要介绍了nginx的docker镜像封禁地区IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、拉取镜像

 此镜像的Nginx 已经集成了 ngx_http_geoip2_module 模块。

docker pull anroe/nginx-geoip2:1.22.1-geoip2-3.4

二、nginx.conf配置文件

1.加载geoip2模块。

load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so;

如下图所示:

2.http模块中获取客户端真实ip地址:

  map $http_x_forwarded_for  $clientRealIp {
            ""      $remote_addr;
                    ~^(?P<firstAddr>[0-9\.]+),?.*$  $firstAddr;
    }

如下图:

3.从 github或者maxmind下载GeoLite2-City.mmdb文件。使 Nginx 结合 GeoLite2 数据库来获取地理位置。

GeoLite2-City.mmdb 是 MaxMind 提供的免费 IP 地理位置数据库。

存在位置漂移与精度低,数据信息缺失:对于某些 IP 地址,尤其是手机移动网络的 IP 或非热门地区的 IP,可能无法解析出具体的城市信息,甚至国家信息也可能缺失。

    geoip2 /etc/nginx/GeoLite2-City.mmdb {
       auto_reload 5m;
       $geoip2_city_name_en source=$clientRealIp city names en;
       $geoip2_city_name_cn source=$clientRealIp city names zh-CN;
    }

新建目录:

mkdir -p /home/app/geoip

下载好文件后至该服务器目录下。

4.添加响应头方便排查问题

add_header X-City-Code $geoip2_city_name_en always;

5.server模块判断ip区域

 if ($geoip2_city_name_en ~* "(Guangzhou)") {
            return 403;
 }

如下图所示:

三.启动nginx 容器

docker run --name nginx-geoip2  -p 443:443 -d -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/app/geoip/GeoLite2-City.mmdb:/etc/nginx/GeoLite2-City.mmdb --restart=always    anroe/nginx-geoip2:1.22.1-geoip2-3.4

 -v /home/app/geoip/GeoLite2-City.mmdb:/etc/nginx/GeoLite2-City.mmdb

将geoip文件映射到容器中,配置文件能引用到:

四、测试

命令: 61.146.4.192替换为客户的ip地址。可以获取到ip所属区域。

 curl -s -I --header "X-Forwarded-For: 61.146.4.192" localhost:443 | grep City

五.请求头中获取所属区域

到此这篇关于nginx的docker镜像封禁地区IP的实现的文章就介绍到这了,更多相关nginx docker封禁地区IP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 三款Docker图形化工具优缺点对比

    三款Docker图形化工具优缺点对比

    大家好,本篇文章主要讲的是三款Docker图形化工具优缺点对比,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • 使用Dockerfile构建docker镜像

    使用Dockerfile构建docker镜像

    这篇文章主要介绍了使用Dockerfile构建docker镜像的方法,帮助大家更好的理解和学习使用docker,感兴趣的朋友可以了解下
    2021-04-04
  • 使用docker-tc对host容器进行限流的操作方法

    使用docker-tc对host容器进行限流的操作方法

    docker-tc是一个github开源项目,这篇文章主要介绍了使用docker-tc对host容器进行限流,需要的朋友可以参考下
    2024-04-04
  • 使用docker compose一键部署项目到服务器过程

    使用docker compose一键部署项目到服务器过程

    本文介绍通过IntelliJ IDEA使用docker-compose.yml构建和管理容器集合,需修改Docker配置、设置执行器路径,编写yml文件并配置删除镜像以确保每次更新拉取远程镜像,最后通过日志管理容器
    2025-07-07
  • docker容器如何优雅的终止详解

    docker容器如何优雅的终止详解

    最近公司在试验如何将项目部署到docker容器中去,这其中涉及到一个技术环节,那就是如何让docker容器优雅的终止。所谓优雅终止,指的就是程序在退出前有清理资源,保存必要中间状态,持久化内存数据的机会。下面通过这篇大家一起由简单到复杂逐一考量一下。
    2016-11-11
  • Docker方式启动tomcat访问首页出现404错误

    Docker方式启动tomcat访问首页出现404错误

    这篇文章主要介绍了Docker方式启动tomcat访问首页出现404错误。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • docker 查询或获取私有仓库(registry)中的镜像的方法

    docker 查询或获取私有仓库(registry)中的镜像的方法

    这篇文章主要介绍了docker 查询或获取私有仓库(registry)中的镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • docker清空日志文件几种方法实现

    docker清空日志文件几种方法实现

    docker 用久了 日志一大堆,很占用空间,不用的日志可以清理掉了,下面这篇文章主要介绍了docker清空日志文件几种方法实现的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • docker数据管理使用及说明

    docker数据管理使用及说明

    本文介绍了Docker数据卷的基本概念、创建和管理方法,强调数据卷用于持久化和共享数据,生命周期独立于容器,并说明了如何挂载主机目录及清理无主数据卷的方法
    2025-10-10
  • Docker安装RabbitMQ AMQP协议及重要角色

    Docker安装RabbitMQ AMQP协议及重要角色

    这篇文章主要为大家介绍了Docker安装RabbitMQ AMQP协议和主要角色详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论