Author image Randy Kobes (contact brian d foy)

NAME

Apache2::Geo::Mirror - Find closest Mirror

SYNOPSIS

 # in httpd.conf
 # PerlModule Apache2::HelloMirror
 #<Location /mirror>
 #   SetHandler perl-script
 #   PerlResponseHandler Apache2::HelloMirror
 #   PerlSetVar GeoIPDBFile "/usr/local/share/GeoIP/GeoIP.dat"
 #   PerlSetVar GeoIPFlag Standard
 #   PerlSetVar GeoIPMirror "/usr/local/share/data/mirror.txt"
 #   PerlSetVar GeoIPDefault it
 #</Location>
 
 # file Apache2::HelloMirror
 
 use Apache2::Geo::Mirror;
 use strict;
 
 use Apache2::Const -compile => 'OK';
 
 sub handler {
   my $r = Apache2::Geo::Mirror->new(shift);
   $r->content_type('text/plain');
   my $mirror = $r->find_mirror_by_addr();
   $r->print($mirror);
  
   Apache2::Const::OK;
 }
 1;
 

DESCRIPTION

This module provides a mod_perl (version 2) interface to the Geo::Mirror module, which finds the closest mirror for an IP address. It uses Geo::IP to identify the country that the IP address originated from. If the country is not represented in the mirror list, then it finds the closest country using a latitude/longitude table.

CONFIGURATION

This module subclasses Apache2::RequestRec, and can be used as follows in an Apache module.

  # file Apache2::HelloMirror
  
  use Apache2::Geo::Mirror;
  use strict;
 
  sub handler {
     my $r = Apache2::Geo::Mirror->new(shift);
     # continue along
  }
 

The PerlSetVar directives in httpd.conf are as follows:

  <Location /mirror>
    PerlSetVar GeoIPDBFile "/usr/local/share/geoip/GeoIP.dat"
    PerlSetVar GeoIPFlag Standard
    PerlSetVar GeoIPMirror "/usr/local/share/data/mirror.txt"
    PerlSetVar GeoIPDefault us
    # other directives
  </Location>
 

The directives available are

PerlSetVar GeoIPDBFile "/path/to/GeoIP.dat"

This specifies the location of the GeoIP.dat file. If not given, it defaults to the location specified upon installing the module.

PerlSetVar GeoIPFlag Standard

This can be set to STANDARD, or for faster performance but at a cost of using more memory, MEMORY_CACHE. When using memory cache you can force a reload if the file is updated by using CHECK_CACHE. The INDEX_CACHE flag caches the most frequently accessed portion of the database. If not specified, STANDARD is used.

PerlSetVar GeoIPMirror "/path/to/mirror.txt"

This specifies the location of a file containing the list of available mirrors. This file contains a list of mirror sites and the corresponding country code in the format

  http://some.server.com/some/path         us
  ftp://some.other.server.fr/somewhere     fr

No default location for this file is assumed.

PerlSetVar GeoIPDefault country

This specifies the country code to be used if a wanted country is not available in the mirror file. This defaults to us.

METHODS

The available methods are as follows.

$mirror = $r->find_mirror_by_country( [$country] );

Finds the nearest mirror by country code. If $country is not given, this defaults to the country as specified by a lookup of $r->connection->remote_ip.

$mirror = $r->find_mirror_by_addr( [$ipaddr] );

Finds the nearest mirror by IP address. If $ipaddr is not given, this defaults $r->connection->remote_ip.

$mirror = $r->find_mirror_by_name( [$ipname] );

Finds the nearest mirror by country code. If $ipname is not given, this defaults to $r->get_remote_host(Apache2::Const::REMOTE_HOST).

AUTOMATIC REDIRECTION

If Apache2::Geo::Mirror is used as

  PerlModule Apache2::Geo::Mirror
  <Location /CPAN>
    PerlSetVar GeoIPDBFile "/usr/local/share/geoip/GeoIP.dat"
    PerlSetVar GeoIPFlag Standard
    PerlSetVar GeoIPMirror "/usr/local/share/data/mirror.txt"
    PerlSetVar GeoIPDefault us
    PerlResponseHandler Apache2::Geo::Mirror->auto_redirect
  </Location>

then an automatic redirection is made.

VERSION

0.10

SEE ALSO

Geo::IP, Geo::Mirror, and Apache2::RequestRec.

AUTHOR

The look-up code for associating a country with an IP address is based on the GeoIP library and the Geo::IP Perl module, and is Copyright (c) 2002, T.J. Mather, tjmather@tjmather.com, New York, NY, USA. See http://www.maxmind.com/ for details. The mod_perl interface is Copyright (c) 2002, Randy Kobes <randy@theoryx5.uwinnipeg.ca>.

All rights reserved. This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.