项目

通用

个人资料

操作

基于IP的地理位置查询

模块:mod_geoip

警报:mod_geoip 已弃用

GeoIP 旧版数据库于 2019 年 1 月 2 日停止维护 (https://dev.maxmind.com/geoip/legacy/release-notes/),并且 mod_geoip 现已弃用。

mod_maxminddb 使用 MaxMind GeoIP2 数据库。这是 GeoIP 旧版数据库的继任者。

要求

软件包:GeoIP C API 和库 (http://www.maxmind.com/download/geoip/api/c/)

概览

mod_geoip 是一个用于快速 IP/位置查询的模块。它使用 MaxMind GeoIP / GeoCity 数据库。
如果在数据库中找到 IP,该模块会将相应的环境变量设置到请求中,从而使此信息可供其他模块/fcgi 使用。

注意
目前仅支持国家/城市数据库,因为 MaxMind 发布了其数据库的免费版本。(谢谢!)

http://www.maxmind.com/download/geoip/database/ - 用于国家数据的 GeoIP.dat.gz,用于国家和城市数据的 GeoLiteCity.dat.gz

配置选项

mod_geoip 使用两个配置选项。

  1. geoip.db-filename = <geoip 或 geocity 数据库的路径>
  2. geoip.memory-cache = <启用|禁用> : 默认禁用

如果启用,mod_geoip 会将数据库二进制文件加载到
内存中以实现非常快速的查询。唯一的代价是内存使用。

注意: mod_geoip 会自动判断数据库类型,因此如果您输入 GeoCity 数据库路径,它将加载 GeoCity 环境变量。

环境变量

每个数据库都设置自己的环境变量

GeoIP (国家)

 GEOIP_COUNTRY_CODE
 GEOIP_COUNTRY_CODE3
 GEOIP_COUNTRY_NAME

GeoCity

 GEOIP_COUNTRY_CODE
 GEOIP_COUNTRY_CODE3
 GEOIP_COUNTRY_NAME
 GEOIP_CITY_NAME
 GEOIP_CITY_POSTAL_CODE
 GEOIP_CITY_LATITUDE
 GEOIP_CITY_LONG_LATITUDE
 GEOIP_CITY_DMA_CODE
 GEOIP_CITY_AREA_CODE

示例

mod_geoip + php

使用 fastcgi(不仅仅是 php)时,您可以访问 mod_geoip 环境变量并随意操作。此示例仅将所有 mod_geoip 环境变量打印到客户端 HTML。

配置文件

 geoip.db-filename = "/your-geoip-db-path/GeoLiteCity.dat" 
 geoip.memory-cache = "enable" 

index.php

 <?php
         $country_code = $_SERVER['GEOIP_COUNTRY_CODE'];
         $country_code3 = $_SERVER['GEOIP_COUNTRY_CODE3'];
         $country_name = $_SERVER['GEOIP_COUNTRY_NAME'];

         $city_region = $_SERVER['GEOIP_CITY_REGION'];
         $city_name = $_SERVER['GEOIP_CITY_NAME'];
         $city_postal_code = $_SERVER['GEOIP_CITY_POSTAL_CODE'];
         $city_latitude = $_SERVER['GEOIP_CITY_LATITUDE'];
         $city_long_latitude = $_SERVER['GEOIP_CITY_LONG_LATITUDE'];
         $city_dma_code = $_SERVER['GEOIP_CITY_DMA_CODE'];
         $city_area_code = $_SERVER['GEOIP_CITY_AREA_CODE'];

         echo "<html>\n<body>\n\t<br>\n";
         echo 'Country Code: ' . $country_code . '<br>';
         echo 'Country Code 3: ' . $country_code3 . '<br>';
         echo 'Country Name: ' . $country_name . '<br>';
         echo '<br>';
         echo 'City Region: ' . $city_region . '<br>';
         echo 'City Name: ' . $city_name . '<br>';
         echo 'City Postal Code: ' . $city_postal_code . '<br>';
         echo 'City Latitude: ' . $city_latitude . '<br>';
         echo 'City Long Latitude: ' . $city_long_latitude . '<br>';
         echo 'City DMA Code: ' . $city_dma_code . '<br>';
         echo 'City Area Code: ' . $city_area_code . '<br>';
         echo "</body>\n</html>";
 ?>

基于国家的重定向

配置文件

 $HTTP["host"] =~ "www.domain.com" {
     url.rewrite = ( "" => "/redirect.php")
 }

redirect.php

 <?php
        $country_code = ( !empty( $_SERVER['GEOIP_COUNTRY_CODE'] ) ) ? $_SERVER['GEOIP_COUNTRY_CODE'] : 'US';
        header( 'Location: http://'.strtolower( $country_code ).'.domain.com/' );
        exit;
 ?>

目前,通过 lighttpd 配置文件基于 mod_geoip 进行重定向可以通过一些补丁实现:http://trac.lighttpd.net/trac/ticket/1546。另一种方法是使用 mod_magnet。

下载

更新者 gstrauss 大约 6 年前 · 39 个修订版