13、Nginx高级之高级模块(geoip_module)

news2025/1/6 19:00:07

一、ngx_http_geoip_module模块

ngx_http_geoip_module模块使用预编译的MaxMind数据库,根据客户端IP地址创建变量值 ,读取ip所在地信息。
当使用支持IPv6的数据库(1.3.12, 1.2.7)时,IPv4地址被查找为IPv4映射的IPv6地址。
默认情况下不构建此模块,应 使用 --with-http_geoip_module 配置参数启用它
此模块需要 MaxMind GeoIP
Example Configuration
http {
    geoip_country GeoIP.dat;
    geoip_city GeoLiteCity.dat;
    geoip_proxy 192.168.100.0/24;
    geoip_proxy 2001:0db8::/32;
    geoip_proxy_recursive on;
    ...
}
使用场景:
  1. 区别国内外的ip
  2. 区别城市间的ip

二、指令

句法:geoip_country file;
默认:—
配置项:http
功能:指定用于根据客户端 IP 地址确定国家/地区的数据库。使用此数据库时可以使用以下变量:
  • $geoip_country_code:两个字母的国家代码,例如“ RU”、“ US”。
  • $geoip_country_code3:三字母国家代码,例如“ RUS”、“ USA”。
  • $geoip_country_name:国家名称,例如“ Russian Federation”、“ United States”。
    
句法:geoip_city file;
默认:—
配置项:http
功能:定用于根据客户端IP地址确定国家、地区和城市的数据库。使用此数据库时可以使用以下变量:
  • $geoip_area_code:电话区号(仅限美国)。由于相应的数据库字段已弃用,此变量可能包含过时的信息。
  • $geoip_city_continent_code:两个字母的大洲代码,例如“ EU”、“ NA”。
  • $geoip_city_country_code:两个字母的国家代码,例如“ RU”、“ US”。
  • $geoip_city_country_code3:三字母国家代码,例如“ RUS”、“ USA”。
  • $geoip_city_country_name:国家名称,例如“ Russian Federation”、“ United States”。
  • $geoip_dma_code:根据Google AdWords API 中的geotargeting,美国的 DMA 区域代码(也称为“都市圈代码”)。
  • $geoip_latitude:纬度。
  • $geoip_longitude:经度。
  • $geoip_region:双符号国家地区代码(地区、领土、州、省、联邦土地等),例如“ 48”、“ DC”。
  • $geoip_region_name:国家地区名称(地区、领地、州、省、联邦土地等),例如“ Moscow City”、“ District of Columbia”。
  • $geoip_city:城市名称,例如“ Moscow”、“ Washington”。
  • $geoip_postal_code:邮政编码。
   
句法:geoip_org file;
默认:—
配置项:http
功能:该指令出现在版本 1.0.3 中。指定用于根据客户端 IP 地址确定组织的数据库。使用此数据库时,以下变量可用:
  • $geoip_org:组织名称,例如“墨尔本大学”
   
句法:geoip_proxy address | CIDR;
默认:—
配置项:http
功能:定义可信地址。当请求来自受信任的地址时,将使用“X-Forwarded-For”请求标头字段中的地址。

三、示例演示

3.1、下载IP数据库
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
上面的地址已失效(Maxmind不再支持Geolite产,仅支持Geolite2),可以从GeoIP Legacy Databases下载

在目录下会生成2个.gz的文件, 解压生成2个.dat文件然后将它们拷贝至/etc/nginx/geoip目录下:
$ gzip -d -k GeoIP.dat.gz
$ gzip -d -k GeoLiteCity.dat.gz
$ sudo mkdir /etc/nginx/geoip
$ sudo cp GeoIp.dat /etc/nginx/geoip
$ sudo cp GeoLiteCity.dat /etc/nginx/geoip

3.2、下载可以读取GeoIP数据库的工具

IP 地域数据库(GeoIP.dat)文件是二进制的,需要用GeoIP库来读取。所以除了要下载 GeoIP.dat 文件外,还需要安装能读取这个文件的库。
GeoIP project files : GeoIP
$ wget https://launchpadlibrarian.net/96958425/GeoIP-1.4.8.tar.gz  
# http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz失效
$ tar -zxvf GeoIP-1.4.8.tar.gz
$ cd GeoIP-1.4.8    # 注意这个解压出的版本随时在变,我解压时,是1.4.8版本的
$ ./configure
$ make; make install
上面的操作,将工具安装到了/usr/local/lib目录下,我们需要让其生效。
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
$ ldconfig

3.3、编译nginx带上 ngx_http_geoip_module 模块

(3条消息) nginx添加模块_青霄的博客-CSDN博客
查看有没有geoip模块:若没有 使用 --with-http_geoip_module 配置参数编译nginx

3.4、配置conf.d/geoip.conf: 在http域引入上面生成的2个.dat文件

# 引入地域ip文件
geoip_country /etc/nginx/geoip/GeoIp.dat;
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; 

server {
    listen 8088;
    server_name localhost;

    root /usr/share/nginx/html/;

    #set $geoip_country_code "hh";
    #set $geoip_country_name "china";
    #set $geoip_city "nj";


    # 所在国代码不是CN则拦截,返回403
    location / {
        if ($geoip_country_code != CN) {  
            return 403;
        }
        index index.html index.htm;
    }
    
    # 测试本地ip的所在国名称/所在国代码/所在城市名称
    location /myip {
        default_type text/plain;
        add_header X-Geo $geoip_country_code;                   
        add_header X-Geo3 $geoip_country_code3;

        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
    }
}

3.5、测试

阿里云机器,ECS公网IP: 47.103.25.92
在代理的情况下($geoip_country_code不为CN)访问nginx, 结果如下:

在无代理的情况下用本地ip($geoip_country_code为CN)访问nginx, 结果如下:

四、参考

Module ngx_http_geoip_module

nginx - HttpGeoipModule $geoip_country_code is blank - Server Fault

#2321(ngx_http_geoip_module问题) - 恩金克斯 (nginx.org)

duplicate geoip variable · Issue #92 · leev/ngx_http_geoip2_module · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聚焦数字能源供给侧和需求侧,龙讯旷腾出席2023全球数字能源展

本月初,深圳市人民政府新闻办召开2023全球数字能源展新闻发布会,宣布本次展会将于6月29日-7月2日在深圳会展中心(福田馆)举办。此次展会将聚焦数字能源供给侧和需求侧,着力打造数字能源领域集专业性、实践性、国际性和…

打造智能公路工程:BIM+GIS可视化管理平台的应用

摘要: 本文研究了BIM技术在交通基础设施领域的应用现状,并探索了BIM与GIS技术的关键融合方法,研发了BIMGIS可视化管理平台,并通过实际项目应用验证方案的可行性。研究表明,BIM与GIS的融合技术具有广泛的应用价值&…

人人都能生成火爆全网的最不像二维码的二维码

最近有人展示了使用 Stable Diffusion 创建的艺术二维码。这些二维码是使用定制训练的 ControlNet模型生成的。 但是操作门槛有点高。 你需要 GPU,还需要学习如何使用 Stable Diffusion。 现在有一款非常无脑的产品,使用这个产品来创建艺术二维码&…

【算法题】算法之动态规划系列(基础篇)

算法之动态规划系列(基础篇) 一、前置基础二、题目-- 爬楼梯2.1、思路2.2 代码实现 三、题目--杨辉三角3.1、思路3.2、代码实现 四、题目--买卖股票的最佳时机4.1、思路4.2、代码实现4.3、优化 五、比特位计数5.1、思路5.2、代码实现(最高有效…

大数据从0到1的完美落地之sqoop命令执行

Sqoop命令执行 常见命令执行参数 通过Sqoop加不同参数可以执行导入导出,通过sqoop help 可以查看常见的命令行 #常见Sqoop参数 [rootqianfeng01 sqoop-1.4.7] sqoop helpcodegen Generate code to interact with database recordscreate-hive-table Import a ta…

DC-DC降压恒流芯片 12-110V 9V/1A AP2400 LED汽车摩托车灯驱动IC

1,方案来源:深圳市世微半导体有限公司 2,产品BOM表:输入 12-100V 输出9V 0.9A 3,产品线路图:输入 12-100V 输出9V 0.9A 4,产品介绍 AP2400 是一款 PWM 工作模式, 率、外围简单、外驱功率管&#xff0…

Axure教程—复选框全选与反选

很多业务系统之中都会有以列表的形式展现数据的情况,那么问题来了,对列表选择时会出现多选、全选、反选的问题,今天就来介绍如何使用axure原型工具实现复选框的多选、全选和反选。 效果预览 预览地址:https://ddprtm.axshare.com…

FFmpeg流媒体处理的收流与推流

1. 简介 流媒体是使用了流式传输的多媒体应用技术。如下是维基百科关于流媒体概念的定义: 流媒体 (streaming media) 是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使…

20亿元项目“落子”杭州,这家企业加速全栈智驾平台规模化交付

6月20日,在“幸会杭州”投资促进大会上,中国领先的智能驾驶解决方案服务商和产品供应商福瑞泰克与杭州市政府就在杭州市高新技术开发区(滨江)建设全球研发管理总部达成签约。福瑞泰克董事长兼首席执行官张林博士受邀出席大会&…

SSM摄影服务线上选购预约系统-计算机毕设 附源码83784

SSM摄影服务线上选购预约系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用SSM技…

网络安全|渗透测试入门学习,从零基础入门到精通—动态分析技术OllyDbg案例详情

目录 1、准备工作 2、加载目标文件进行调试 3、单步跟踪 4、设置断点 5、调试分析 1、准备工作 分析一个Windows程序要比分析一个DOS程序容易得多因为在Windows中只要API函数被使用了,再想对要寻找蛛丝马迹的人隐藏一些信息就比较困难了。因此,在分析…

软考高级系统架构设计师(七) 需求工程相关

目录 需求工程概述 需求工程-需求获取 需求开发-需求分析 需求分析-OOA OOA-UML-41视图 需求定义 需求验证 需求跟踪 需求变更管理 软件系统建模 结构化设计 面向对象设计 软件界面设计 需求工程概述 需求工程-需求获取 需求获取方法: 需求开发-需求分…

在 BI 工具 Tableau 中使用 databend

Tableau是一款流行的数据可视化和业务智能工具。它提供了直观、交互式的方式来探索、分析和呈现数据,帮助用户更好地理解数据的意义和洞察。 本教程帮助用户在 Tableau 中连接 databend 进行 BI 数据分析。 Databend jdbc Tableau 支持所有实现了 JDBC 协议的数据…

如何在 Spring Boot 中使用 WebFlux

如何在 Spring Boot 中使用 WebFlux 随着互联网应用的复杂度不断增加,传统的请求响应模型已经无法满足日益增长的需求。传统的 Web 应用使用 Servlet 容器,采用同步阻塞的方式来处理请求,请求需要等待相应的处理逻辑完成后才能返回结果。这种…

【C/C++实战项目】万年历

目录 项目分析 项目效果 头文件及全局变量 获取天数 打印月份、年份日历 main函数 项目分析 实现查询某一个年份、月份,以日历的格式打印为了观赏性利用符号对打印的每一个日期进行分格特殊节日日期能够在日历中标注出来万年历的起始日期是公元1年&#xff0…

[Orin Nx] 如何跑满GPU和CPU,观察温度和散热性能?

1、环境说明 硬件: Nvidia Orin NX 16GB 软件:Jetson Linux R35.3.1 2、工具安装部署 GPU的压力测试主要使用工具: https://github.com/anseeto/jetson-gpu-burn CPU的压力测试主要使用工具 stress 注意安装 jetson-gpu-burn需要在 /etc/apt/sourc…

SpringBoot 客户信息管理系统-计算机毕设 附源码80944

SpringBoot客户信息管理系统 摘 要 随着计算机技术的发展,特别是计算机网络技术与数据库技术的发展,使用人们的生活与工作方式发生了很大的改观。本课题研究的客户信息管理系统,主要功能模块包括统计图,系统用户(管理…

JS高级用法:像大神一样玩转JavaScript

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 众所周知,JavaScript是一种非常流行的编程语言,它已经成为了…

回收站如何添加到桌面?没有回收站的数据怎么恢复

最近收到很多这样的咨询: 咨询1:在网吧上网,不小心把照片删了,可恨的是这里没有回收站,请问怎么找回照片!!!急,谢谢了。 咨询2:在网吧上网,一删除…

emmylua+Rider 断点调试

1、下载安装并激活好rider(本次版本基于:JetBrains Rider 2023.1.3) 2、从插件商店中安装emmylua 3、打开项目 在unity中设置好,使用rider打开项目即可 4、Unity中打开相应的场景 (此场景基于Xlua官方Demo展示&…