nginx的docker镜像封禁地区IP

张开发
2026/4/16 4:35:29 15 分钟阅读

分享文章

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; ~^(?PfirstAddr[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 --restartalways 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五.请求头中获取所属区域

更多文章