CN104796437A - 基于Nginx的地理位置信息查询方法、装置及*** - Google Patents
基于Nginx的地理位置信息查询方法、装置及*** Download PDFInfo
- Publication number
- CN104796437A CN104796437A CN201410020360.8A CN201410020360A CN104796437A CN 104796437 A CN104796437 A CN 104796437A CN 201410020360 A CN201410020360 A CN 201410020360A CN 104796437 A CN104796437 A CN 104796437A
- Authority
- CN
- China
- Prior art keywords
- location information
- client
- address
- storehouse
- geographical location
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例公开了一种基于Nginx的地理位置信息查询方法、装置及***,该方法包括:从客户端发送的HTTP请求中获取所述客户端的IP地址;根据所述客户端的IP地址获取所述客户端的地理位置信息;将所述客户端的地理位置信息添加至所述HTTP请求的URL中;将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。本发明通过利用Nginx技术集中地根据客户端的IP地址对其地理位置信息进行识别,可以有效地为任何语言开发的任意不同的WEB应用提供客户端的地理位置信息,查询效率较高,不会影响WEB应用的响应速度;只需简单的配置即可实现,避免了重复开发,节省了成本;同时由于是集中统一的进行识别,也更加方便维护。
Description
技术领域
本发明涉及网络技术,尤其涉及一种基于Nginx的地理位置信息查询方法、装置及***。
背景技术
WEB应用经常会需要根据客户端的IP信息获取该用户的地理位置信息,根据地理位置的不同,WEB应用对不同位置的用户呈现出差异化和针对性。在获取和识别用户地理位置的过程中,目前通用的做法是整理一个IP库,记录客户端IP与其地理位置信息的对应关系,当接收到客户端请求时,在WEB应用中直接通过客户端IP查询对应的地理位置信息。
在WEB应用中直接使用IP查询地理位置信息的方式存在一些问题,包括:在常用的WEB应用开发语言(如Java,PHP,Python等)中,这种查询往往效率不高,严重影响服务响应速度;不同的程序都需要进行重复开发,影响服务开发速度及可维护性;不同的语言要开发不同的版本,缺乏通用性。
发明内容
本发明实施例所要解决的技术问题在于,针对现有技术中不同WEB应用基于IP地址查询地理位置信息的程序不能通用、且查询效率不高的缺陷,提供一种基于Nginx的地理位置信息查询方法、装置及***,可集中地为不同WEB应用提供地理位置信息,通用性强,且查询效率高。
为了解决上述技术问题,本发明实施例提供了一种基于Nginx的地理位置信息查询方法,包括:
从客户端发送的HTTP请求中获取所述客户端的IP地址;
根据所述客户端的IP地址获取所述客户端的地理位置信息;
将所述客户端的地理位置信息添加至所述HTTP请求的URL中;
将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。
其中,所述根据所述客户端的IP地址获取所述客户端的地理位置信息的步骤包括:
预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系;
根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。
其中,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息。
其中,在所述IP库中,所述IP网络段是按照IP地址数值的升序或降序排列的;
所述根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息的步骤包括:
采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。
其中,在所述IP库中,所述IP网络段是按照IP地址数值的升序排列的;
所述采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段的步骤包括:
将所述客户端的IP地址与所述IP库中间位置的IP网络段对比,
当所述客户端的IP地址数值小于所述IP库中间位置的IP网络段的起始IP地址数值时,从所述IP库中间位置向前继续查找与所述客户端的IP地址匹配的IP网络段;
当所述客户端的IP地址数值大于所述IP库中间位置的IP网络段的结束IP地址数值时,从所述IP库中间位置向后继续查找与所述客户端的IP地址匹配的IP网络段;
当所述客户端的IP地址数值不小于所述IP库中间位置IP网络段的起始IP地址数值、且不大于所述IP库中间位置IP网络段的结束IP地址数值时,将所述IP库中间位置的IP网络段作为与所述客户端的IP地址相匹配的IP网络段。
相应地,本发明还提供了一种基于Nginx的地理位置信息查询装置,包括:
客户端IP获取模块,用于从客户端发送的HTTP请求中获取所述客户端的IP地址;
客户端位置获取模块,用于根据所述客户端的IP地址获取所述客户端的地理位置信息;
位置信息添加模块,用于将所述客户端的地理位置信息添加至所述HTTP请求的URL中;
转发模块,用于将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。
其中,所述客户端位置获取模块包括:
IP库设置模块,用于预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系;
查找模块,用于根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。
其中,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息。
其中,在所述IP库中,所述IP网络段是按照IP地址数值的升序或降序排列的;
所述查找模块用于采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。
另外,本发明还提供了一种基于Nginx的地理位置信息查询***,包括应用服务器、以及以上任一项所述的基于Nginx的地理位置信息查询装置,其中所述应用服务器与所述基于Nginx的地理位置信息查询装置通信连接。
实施本发明实施例,具有如下有益效果:通过利用Nginx技术集中地根据客户端的IP地址对其地理位置信息进行识别,可以有效地为任何语言开发的任意不同的WEB应用提供客户端的地理位置信息,查询效率较高,不会影响WEB应用的响应速度;只需简单的配置即可实现,避免了重复开发,节省了成本;同时由于是集中统一的进行识别,也更加方便维护。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的基于Nginx的地理位置信息查询方法的第一实施例流程图;
图2是本发明提供的基于Nginx的地理位置信息查询方法的第二实施例流程图;
图3是本发明提供的基于Nginx的地理位置信息查询方法的第三实施例流程图;
图4是本发明提供的基于Nginx的地理位置信息查询装置的结构示意图;
图5是图4所示的客户端位置获取模块420的结构示意图;
图6是本发明提供的基于Nginx的地理位置信息查询***的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Nginx("engine x")是一个高性能的HTTP和反向代理服务器,在一个BSD-like协议下发行,其特点是占有内存少,并发能力强。在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一,能够支持高达50,000个并发连接数。Nginx可以作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP程序对外进行服务,也可以支持作为HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是***资源开销还是CPU使用效率都比Perlbal要好很多。Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作***,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用***C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。在本发明中,利用Nginx的这些性质来实现各个WEB应用的客户端地理位置信息查询功能。
请参见图1,是本发明提供的基于Nginx的地理位置信息查询方法的第一实施例流程图。该方法包括:
S101、从客户端发送的HTTP请求中获取所述客户端的IP地址。一般来说,客户端发送的HTTP请求中包含有该客户端的IP地址,因此可以根据HTTP请求获取该客户端的IP地址,例如该客户端的IP地址可以是“219.223.234.212”。
S102、根据所述客户端的IP地址获取所述客户端的地理位置信息。客户端的地理位置信息指的是客户端(访问者)当前所在位置,通常WEB应用可以根据不同的地理位置信息为用户提供差异化服务。一般来说,WEB应用需要的客户端地理位置信息仅仅是客户端所在的省份、城市等地理范围信息,以便提供针对这一地理范围内的用户的差异化服务。具体地,例如,可以根据预先设置的包含有IP地址与地理位置信息的对应关系的IP库来获取所述客户端的地理位置。又例如,还可以将所述客户端的IP地址转换成全称域名,并封装成相应的第一DNS查询请求;依据所述第一DNS查询请求,定位目标级DNS权威服务器;由所述目标级DNS权威服务器重定向所述全称域名,获得映射的ISP所属DNS权威服务器的信息;将重定向的全称域名封装成相应的第二DNS查询请求,并发送至所述ISP所属DNS权威服务器,由所述ISP所属DNS权威服务器依据私有策略返回对应的TXT格式的地理位置信息。还例如,可以通过公开的IP库搜索待分析IP地址以获得所述待分析IP地址的公布地理位置;通过网络检测工具获得所述待分析IP地址对应的最后一跳地址的地理位置;通过网购信息和社区网站访问信息获得所述待分析IP地址的间接地理位置;通过网络检测工具获取所述待分析IP地址每一跳地址的地理位置,并根据所述每一跳地址的地理位置判断所述待分析IP地址的拓扑地理位置;以及根据所述待分析IP地址的公布地理位置、最后一跳地址的地理位置、间接地理位置和拓扑地理位置确定所述待分析IP地址的地理位置。
S103、将所述客户端的地理位置信息添加至所述HTTP请求的URL中。例如步骤S101中接收的HTTP请求的URL可以是“http://host/service?arg1=x”,步骤S102中获取该客户端的地理位置信息是广东省深圳市,则步骤S103中可以将步骤S102中获取的客户端地理位置信息添加至步骤S101中接收的HTTP请求的URL中,例如,添加了地理位置信息的HTTP请求的URL可以是“http://host/service?arg1=xx&area=广东省深圳市”。
S104、将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。应用服务器可以直接从HTTP请求的参数中获取发出请求的客户端的地理位置信息,从而进行相关的业务处理。
本发明实施例提供的基于Nginx的地理位置信息查询方法,通过利用Nginx技术集中地根据客户端的IP地址对其地理位置信息进行识别,可以有效地为任何语言开发的任意不同的WEB应用提供客户端的地理位置信息,查询效率较高,不会影响WEB应用的响应速度;只需简单的配置即可实现,避免了重复开发,节省了成本;同时由于是集中统一的进行识别,也更加方便维护。
优选地,图1所示的步骤S102可以包括:预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系;根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。其中,预置的IP库中的数据可以来自于IP138、纯真IP库、APNIC数据库等。
优选地,IP库可以采用文本格式保存在内存中,这样可以方便快速查询。例如,IP库中每行的数据结构可以如下所示:
网段开始地址 网段结束地址 省市信息
也就是说,每行分别代表一个IP网络段及对应的地理位置信息。具体地,其中一行可以如下:
219.223.234.0 219.223.235.255 广东省深圳市
在这个例子中,IP库中预先设置的IP地址与地理位置信息的对应关系是,每个IP网络段分别对应于一个地理位置信息(例如省市信息)。下面将参考图2对采用这种IP库的地理位置信息查询方法进行举例说明。
请参见图2,是本发明提供的基于Nginx的地理位置信息查询方法的第二实施例流程图,该方法包括:
S201、预先设置IP库,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息,例如IP网络段“219.223.234.0~219.223.235.255”对应于“广东省深圳市”。
S202、从客户端发送的HTTP请求中获取所述客户端的IP地址。一般来说,客户端发送的HTTP请求中包含有该客户端的IP地址,因此可以根据HTTP请求获取该客户端的IP地址,例如该客户端的IP地址可以是“219.223.234.212”。
S203、在预先设置的IP库中查找所述客户端的IP地址所属的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。例如,在IP库中查找到客户端IP地址“219.223.234.212”属于IP网络段“219.223.234.0~219.223.235.255”,就可以判定该客户端的当前处于广东省深圳市。
S204、将所述客户端的地理位置信息添加至所述HTTP请求的URL中。例如步骤S202中接收的HTTP请求的URL可以是“http://host/service?arg1=x”,步骤S203中获取该客户端的地理位置信息是广东省深圳市,则步骤S204中可以将步骤S203中获取的客户端地理位置信息添加至步骤S202中接收的HTTP请求的URL中,例如,添加了地理位置信息的HTTP请求的URL可以是“http://host/service?arg1=xx&area=广东省深圳市”。
S205、将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。应用服务器可以直接从HTTP请求的参数中获取发出请求的客户端的地理位置信息,从而进行相关的业务处理。
具体地,在IP库中,可以以结构体数组的方式来存储IP地址与地理位置信息的对应关系。例如,其中一种结构体数组的结构可以如下所示:
其中,1≤t≤n,n是正整数,begin是IP网络段的起始IP地址,end是IP网络段的结束IP地址,area是该IP网络段对应的地理位置信息。
另外,在IP库中,这些结构体数组可以按照一定顺序(例如升序或降序)来排列,以便能够按照排列的规律更快速地查找到客户端的IP地址所对应的地理位置信息。优选地,这些结构体数组可以按照IP地址数值的升序来排列,例如:
ip_node_1 | ip_node_2 | ip_node_3 | ip_node_4 | ...... | ip_node_n |
例如,其中ip_node_1对应的IP网络段可以是“219.221.0.0~219.221.20.255”,ip_node_2对应的IP网络段可以是“219.221.21.0~219.221.26.255”,ip_node_3对应的IP网络段可以是“219.221.27.0~219.221.52.255”,其它结构体数组类似。当然,各个IP网络段之间可以是不连续的。下面将参考图3对采用这种升序排列的IP库的地理位置信息查询方法进行举例说明。
请参见图3,是本发明提供的基于Nginx的地理位置信息查询方法的第三实施例流程图,该方法包括:
S301、预先设置IP库,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息,且所述IP网络段按照IP地址数值的升序排列。IP地址通常被分为4跳,每跳之间用“.”隔开,IP地址数值指的是每跳的数值,在比较IP地址数值大小时,先比较第一跳,只有第一跳的值大小相等时,才比较下一跳,依次类推。
S302、从客户端发送的HTTP请求中获取所述客户端的IP地址。
S303、将所述客户端的IP地址与所述IP库中间位置的IP网络段对比,判断所述客户端的IP地址数值是否小于所述IP库中间位置的IP网络段的起始IP地址数值。
若步骤S303的判断结果为是,则执行步骤S304。
S304、从所述IP库中间位置向前继续查找与所述客户端的IP地址匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。接下来执行步骤S308。
若步骤S303的判断结果为否,则执行步骤S305。
S305、判断所述客户端的IP地址数值是否大于所述IP库中间位置的IP网络段的结束IP地址数值。
若步骤S305的判断结果为是,则执行步骤S306。
S306、从所述IP库中间位置向后继续查找与所述客户端的IP地址匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。接下来执行步骤S308。
若步骤S305的判断结果为否,则执行步骤S307。
S307、直接将所述IP库中间位置的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。接下来执行步骤S308。
S308、将所述客户端的地理位置信息添加至所述HTTP请求的URL中。
S309、将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。应用服务器可以直接从HTTP请求的参数中获取发出请求的客户端的地理位置信息,从而进行相关的业务处理。
图3所示的实施例中,将IP地址与地理位置信息中间的对应关系按照升序结构体数组的方式进行存储,并采用了二分查找算法进行查找。当然,也可以采用降序方式进行存储,并采用二分查找算法进行查找,过程与图3所示的实施例类似。另外,还可以根据需求采用其他格式进行存储,并采取其他相应的查找算法。例如,可以将IP地址与地理位置信息中间的对应关系存储为树状结构,然后采用树匹配算法进行查找。但是,在多种存储方式及其相应的查找算法中,采用升序或降序结构体数组进行存储以及采用相应的二分查找算法进行查找,显然更加简单高效。
优选地,在步骤S304和步骤S306中,还可以继续采用这种二分查找算法,即利用IP库中间位置的IP网络段将IP库划分为前、后两个子表,如果客户端IP地址小于IP库中间位置的IP网络段,则进一步二分查找前一子表,否则进一步二分查找后一子表,重复以上过程,直至找到满足条件的IP网络段,使查找成功;或者直到子表不存在位置,此时查找失败。
请参见图4,是本发明提供的基于Nginx的地理位置信息查询装置400的第一实施例结构示意图,该装置400包括:
客户端IP获取模块410,用于从客户端发送的HTTP请求中获取所述客户端的IP地址。一般来说,客户端发送的HTTP请求中包含有该客户端的IP地址,因此可以根据HTTP请求获取该客户端的IP地址,例如该客户端的IP地址可以是“219.223.234.212”。
客户端位置获取模块420,用于根据所述客户端的IP地址获取所述客户端的地理位置信息。客户端的地理位置信息指的是客户端(访问者)当前所在位置,通常WEB应用可以根据不同的地理位置信息为用户提供差异化服务。一般来说,WEB应用需要的客户端地理位置信息仅仅是客户端所在的省份、城市等地理范围信息,以便提供针对这一地理范围内的用户的差异化服务。具体地,例如,可以根据预先设置的包含有IP地址与地理位置信息的对应关系的IP库来获取所述客户端的地理位置。又例如,还可以将所述客户端的IP地址转换成全称域名,并封装成相应的第一DNS查询请求;依据所述第一DNS查询请求,定位目标级DNS权威服务器;由所述目标级DNS权威服务器重定向所述全称域名,获得映射的ISP所属DNS权威服务器的信息;将重定向的全称域名封装成相应的第二DNS查询请求,并发送至所述ISP所属DNS权威服务器,由所述ISP所属DNS权威服务器依据私有策略返回对应的TXT格式的地理位置信息。还例如,可以通过公开的IP库搜索待分析IP地址以获得所述待分析IP地址的公布地理位置;通过网络检测工具获得所述待分析IP地址对应的最后一跳地址的地理位置;通过网购信息和社区网站访问信息获得所述待分析IP地址的间接地理位置;通过网络检测工具获取所述待分析IP地址每一跳地址的地理位置,并根据所述每一跳地址的地理位置判断所述待分析IP地址的拓扑地理位置;以及根据所述待分析IP地址的公布地理位置、最后一跳地址的地理位置、间接地理位置和拓扑地理位置确定所述待分析IP地址的地理位置。
位置信息添加模块430,用于将所述客户端的地理位置信息添加至所述HTTP请求的URL中。例如客户端IP获取模块接收的HTTP请求的URL可以是“http://host/service?arg1=x”,客户端位置获取模块获取该客户端的地理位置信息是广东省深圳市,则位置信息添加模块430可以将客户端位置获取模块获取的客户端地理位置信息添加至客户端IP获取模块接收的HTTP请求的URL中,例如,添加了地理位置信息的HTTP请求的URL可以是“http://host/service?arg1=xx&area=广东省深圳市”。
转发模块440,用于将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。应用服务器可以直接从HTTP请求的参数中获取发出请求的客户端的地理位置信息,从而进行相关的业务处理。
本发明实施例提供的基于Nginx的地理位置信息查询装置,通过利用Nginx技术集中地根据客户端的IP地址对其地理位置信息进行识别,可以有效地为任何语言开发的任意不同的WEB应用提供客户端的地理位置信息,查询效率较高,不会影响WEB应用的响应速度;只需简单的配置即可实现,避免了重复开发,节省了成本;同时由于是集中统一的进行识别,也更加方便维护。
优选地,如图5所示,客户端位置获取模块420可以包括:
IP库设置模块510,用于预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系。其中,预置的IP库中的数据可以来自于IP138、纯真IP库、APNIC数据库等。
查找模块520,用于根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。
优选地,IP库可以采用文本格式保存在内存中,这样可以方便快速查询。例如,IP库中每行的数据结构可以如下所示:
网段开始地址 网段结束地址 省市信息
也就是说,每行分别代表一个IP网络段及对应的地理位置信息。具体地,其中一行可以如下:
219.223.234.0 219.223.235.255 广东省深圳市
在这个例子中,IP库中预先设置的IP地址与地理位置信息的对应关系是,每个IP网络段分别对应于一个地理位置信息(例如省市信息)。此时,查找模块520可以用于在预先设置的IP库中查找所述客户端的IP地址所属的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。例如,查找模块520在IP库中查找到客户端IP地址“219.223.234.212”属于IP网络段“219.223.234.0~219.223.235.255”,就可以判定该客户端的当前处于广东省深圳市。
具体地,在IP库中,可以以结构体数组的方式来存储IP地址与地理位置信息的对应关系。例如,其中一种结构体数组的结构可以如下所示:
其中,1≤t≤n,n是正整数,begin是IP网络段的起始IP地址,end是IP网络段的结束IP地址,area是该IP网络段对应的地理位置信息。
另外,在IP库中,这些结构体数组可以按照一定顺序(例如升序或降序)来排列,以便能够按照排列的规律更快速地查找到客户端的IP地址所对应的地理位置信息。优选地,这些结构体数组可以按照IP地址数值的升序来排列,例如:
ip_node_1 | ip_node_2 | ip_node_3 | ip_node_4 | ...... | ip_node_n |
例如,其中ip_node_1对应的IP网络段可以是“219.221.0.0~219.221.20.255”,ip_node_2对应的IP网络段可以是“219.221.21.0~219.221.26.255”,ip_node_3对应的IP网络段可以是“219.221.27.0~219.221.52.255”,其它结构体数组类似。当然,各个IP网络段之间可以是不连续的。
当IP库中的IP网络段按照IP地址数值的升序或降序排列时,查找模块520可以用于采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。例如,若IP库中的IP网络段按照IP地址数值的升序排列,查找模块520可以用于:将所述客户端的IP地址与所述IP库中间位置的IP网络段对比,当所述客户端的IP地址数值小于所述IP库中间位置的IP网络段的起始IP地址数值时,从所述IP库中间位置向前继续查找与所述客户端的IP地址匹配的IP网络段;当所述客户端的IP地址数值大于所述IP库中间位置的IP网络段的结束IP地址数值时,从所述IP库中间位置向后继续查找与所述客户端的IP地址匹配的IP网络段;当所述客户端的IP地址数值不小于所述IP库中间位置IP网络段的起始IP地址数值、且不大于所述IP库中间位置IP网络段的结束IP地址数值时,将所述IP库中间位置的IP网络段作为与所述客户端的IP地址相匹配的IP网络段。优选地,查找模块在IP库中从中间位置向前或向向后查找时,还可以继续采用这种二分查找算法,即利用IP库中间位置的IP网络段将IP库划分为前、后两个子表,如果客户端IP地址小于IP库中间位置的IP网络段,则进一步二分查找前一子表,否则进一步二分查找后一子表,重复以上过程,直至找到满足条件的IP网络段,使查找成功;或者直到子表不存在位置,此时查找失败。
请参见图6,是本发明提供的基于Nginx的地理位置信息查询***的结构示意图,该***包括应用服务器600、以及前述的基于Nginx的地理位置信息查询装置400,其中应用服务器600与基于Nginx的地理位置信息查询装置400通信连接。其中,基于Nginx的地理位置信息查询装置400可以通过客户端的HTTP请求,自动添加客户端的地理位置信息,使得后端的应用服务器600直接在HTTP请求的参数中就可以取到客户端的地理位置信息。由于采用了统一高效的地理位置信息查询装置400,使得WEB应用服务器不用重复的开发相同的功能,WEB应用服务器只需要使用带有地理位置信息查询装置400的Nginx服务器作为代理,便能自动获取到地理位置信息。同时地理位置信息查询装置400适用于任何基于HTTP的WEB应用,而不管该WEB应用采用何种语言开发。由于Nginx一般采用C语言开发,IP库信息完全存储在内存中,地理位置信息查询装置400具有极好的查询效率,不会影响WEB应用的响应速度。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (10)
1.一种基于Nginx的地理位置信息查询方法,其特征在于,包括:
从客户端发送的HTTP请求中获取所述客户端的IP地址;
根据所述客户端的IP地址获取所述客户端的地理位置信息;
将所述客户端的地理位置信息添加至所述HTTP请求的URL中;
将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。
2.如权利要求1所述的基于Nginx的地理位置信息查询方法,其特征在于,所述根据所述客户端的IP地址获取所述客户端的地理位置信息的步骤包括:
预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系;
根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。
3.如权利要求2所述的基于Nginx的地理位置信息查询方法,其特征在于,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息。
4.如权利要求3所述的基于Nginx的地理位置信息查询方法,其特征在于,在所述IP库中,所述IP网络段是按照IP地址数值的升序或降序排列的;
所述根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息的步骤包括:
采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。
5.如权利要求4所述的基于Nginx的地理位置信息查询方法,其特征在于,在所述IP库中,所述IP网络段是按照IP地址数值的升序排列的;
所述采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段的步骤包括:
将所述客户端的IP地址与所述IP库中间位置的IP网络段对比,
当所述客户端的IP地址数值小于所述IP库中间位置的IP网络段的起始IP地址数值时,从所述IP库中间位置向前继续查找与所述客户端的IP地址匹配的IP网络段;
当所述客户端的IP地址数值大于所述IP库中间位置的IP网络段的结束IP地址数值时,从所述IP库中间位置向后继续查找与所述客户端的IP地址匹配的IP网络段;
当所述客户端的IP地址数值不小于所述IP库中间位置IP网络段的起始IP地址数值、且不大于所述IP库中间位置IP网络段的结束IP地址数值时,将所述IP库中间位置的IP网络段作为与所述客户端的IP地址相匹配的IP网络段。
6.一种基于Nginx的地理位置信息查询装置,其特征在于,包括:
客户端IP获取模块,用于从客户端发送的HTTP请求中获取所述客户端的IP地址;
客户端位置获取模块,用于根据所述客户端的IP地址获取所述客户端的地理位置信息;
位置信息添加模块,用于将所述客户端的地理位置信息添加至所述HTTP请求的URL中;
转发模块,用于将添加了地理位置信息的HTTP请求转发给所述HTTP请求对应的应用服务器。
7.如权利要求6所述的基于Nginx的地理位置信息查询装置,其特征在于,所述客户端位置获取模块包括:
IP库设置模块,用于预先设置IP库,所述IP库中包括IP地址与地理位置信息的对应关系;
查找模块,用于根据所述客户端的IP地址在所述IP库中查找所述客户端的地理位置信息。
8.如权利要求7所述的基于Nginx的地理位置信息查询装置,其特征在于,在所述IP库中,将所有IP地址划分为不同的IP网络段,每个IP网络段分别对应于一个地理位置信息。
9.如权利要求8所述的基于Nginx的地理位置信息查询装置,其特征在于,在所述IP库中,所述IP网络段是按照IP地址数值的升序或降序排列的;
所述查找模块用于采用二分查找算法在所述IP库中查找与所述客户端的IP地址相匹配的IP网络段,将查找到的IP网络段所对应的地理位置信息作为所述客户端的地理位置信息。
10.一种基于Nginx的地理位置信息查询***,其特征在于,包括应用服务器、以及如权利要求6-9中任一项所述的基于Nginx的地理位置信息查询装置,其中所述应用服务器与所述基于Nginx的地理位置信息查询装置通信连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410020360.8A CN104796437A (zh) | 2014-01-16 | 2014-01-16 | 基于Nginx的地理位置信息查询方法、装置及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410020360.8A CN104796437A (zh) | 2014-01-16 | 2014-01-16 | 基于Nginx的地理位置信息查询方法、装置及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104796437A true CN104796437A (zh) | 2015-07-22 |
Family
ID=53560949
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410020360.8A Pending CN104796437A (zh) | 2014-01-16 | 2014-01-16 | 基于Nginx的地理位置信息查询方法、装置及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104796437A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105955785A (zh) * | 2016-05-12 | 2016-09-21 | 武汉斗鱼网络科技有限公司 | 一种桌面应用程序中维护host状态的实现方法及*** |
CN110266834A (zh) * | 2019-07-29 | 2019-09-20 | 中国工商银行股份有限公司 | 基于互联网协议地址的地区查找方法及装置 |
CN111866205A (zh) * | 2020-06-17 | 2020-10-30 | 新浪网技术(中国)有限公司 | 一种将ip地址转换为位置信息的方法及*** |
CN112307138A (zh) * | 2019-07-30 | 2021-02-02 | 华扬联众数字技术股份有限公司 | 地域信息的存储和查询方法、***与介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1303105A1 (en) * | 2001-10-10 | 2003-04-16 | Sun Microsystems, Inc. | A method and system for implementing location aware information access and retrieval in a wireless portal server |
CN101702717A (zh) * | 2009-11-24 | 2010-05-05 | 杭州华三通信技术有限公司 | 一种Portal认证的方法、***及设备 |
CN102843391A (zh) * | 2011-06-21 | 2012-12-26 | 中兴通讯股份有限公司 | 一种信息发送方法及网关 |
-
2014
- 2014-01-16 CN CN201410020360.8A patent/CN104796437A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1303105A1 (en) * | 2001-10-10 | 2003-04-16 | Sun Microsystems, Inc. | A method and system for implementing location aware information access and retrieval in a wireless portal server |
CN101702717A (zh) * | 2009-11-24 | 2010-05-05 | 杭州华三通信技术有限公司 | 一种Portal认证的方法、***及设备 |
CN102843391A (zh) * | 2011-06-21 | 2012-12-26 | 中兴通讯股份有限公司 | 一种信息发送方法及网关 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105955785A (zh) * | 2016-05-12 | 2016-09-21 | 武汉斗鱼网络科技有限公司 | 一种桌面应用程序中维护host状态的实现方法及*** |
CN105955785B (zh) * | 2016-05-12 | 2019-01-29 | 武汉斗鱼网络科技有限公司 | 一种桌面应用程序中维护host状态的实现方法及*** |
CN110266834A (zh) * | 2019-07-29 | 2019-09-20 | 中国工商银行股份有限公司 | 基于互联网协议地址的地区查找方法及装置 |
CN110266834B (zh) * | 2019-07-29 | 2022-08-26 | 中国工商银行股份有限公司 | 基于互联网协议地址的地区查找方法及装置 |
CN112307138A (zh) * | 2019-07-30 | 2021-02-02 | 华扬联众数字技术股份有限公司 | 地域信息的存储和查询方法、***与介质 |
CN111866205A (zh) * | 2020-06-17 | 2020-10-30 | 新浪网技术(中国)有限公司 | 一种将ip地址转换为位置信息的方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108712519B (zh) | Ip地址的定位方法、装置及存储介质 | |
US8055762B2 (en) | Method and system for location identification | |
US20160149832A1 (en) | Method and apparatus for increasing subresource loading speed | |
CN103747112A (zh) | 一种cdn回源的方法、第一服务器及*** | |
US9471696B2 (en) | Methods and systems for pathing analysis | |
CN109729183B (zh) | 请求处理方法、装置、设备及存储介质 | |
CN103747273A (zh) | 一种视频请求方法、设备及*** | |
CN104427005A (zh) | 在cdn上实现请求精确调度的方法及*** | |
CN103888358A (zh) | 一种路由方法、装置、***及网关设备 | |
CN110674427B (zh) | 响应网页访问请求的方法、装置、设备及存储介质 | |
CN102761628B (zh) | 泛域名识别、处理装置及方法 | |
CN107566477B (zh) | 一种在分布式文件***集群中获取文件的方法和装置 | |
CN104834721A (zh) | 基于位置的搜索处理方法及装置 | |
US20170339252A1 (en) | Generating a response to a client device in an internet of things domain | |
US20180241814A1 (en) | A System, a Node, a Method in a Communication Network and a Computer Program and Corresponding Computer Program Product | |
CN104539750A (zh) | 一种ip定位方法和装置 | |
WO2017166524A1 (zh) | 域名解析方法及装置 | |
CN102739520A (zh) | 查找方法及装置 | |
CN104796437A (zh) | 基于Nginx的地理位置信息查询方法、装置及*** | |
CN108154024B (zh) | 一种数据检索方法、装置及电子设备 | |
CN111680489A (zh) | 目标文本的匹配方法和装置、存储介质及电子设备 | |
CN102882988A (zh) | 一种获得资源信息的地址信息的方法、装置及设备 | |
CN114448849B (zh) | 网站IPv6网络支持模式检测方法及电子设备 | |
CN104636368A (zh) | 数据检索方法、装置及服务器 | |
CN109788050B (zh) | 一种获取源站ip地址方法、***、电子设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150722 |