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 GeoIPMirror "/usr/local/share/data/mirror.txt"
# PerlSetVar GeoIPDefault "http://www.cpan.org/"
#</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 GeoIPMirror "/usr/local/share/data/mirror.txt"
PerlSetVar GeoIPDefault "http://www.cpan.org/"
PerlSetVar GeoIPFresh 2
# 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 GeoIPFresh 5
-
This specifies a minimum freshness that the chosen mirror must satisfy. If this is not specified, a value of 0 is assumed.
- PerlSetVar GeoIPMirror "/path/to/mirror.txt"
-
This specifies the location of a file containing the list of available mirrors. No default location for this file is assumed. 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
An optional third field may be specified, such as
ftp://some.other.server.ca/somewhere ca 3
where the third number indicates the freshness of the mirror. A default freshness of 0 is assumed when none is specified. When choosing a mirror, if the GeoIPFresh directive is specified, only those mirrors with a freshness equal to or above this value may be chosen.
- PerlSetVar GeoIPDefault "http://some.where.org/"
-
This specifies the default url to be used if no nearby mirror is found. Multiple values may be specified using PerlAddVar; if more than one default is given, a random one will be chosen.
- PerlSetVar GeoIPXForwardedFor 1
-
If this directive is set to something true, the X-Forwarded-For header will be used to try to identify the originating IP address; this is useful for clients connecting to a web server through an HTTP proxy or load balancer. If this header is not present,
$r->connection->remote_ip
will be used.
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, the value obtained by examining the X-Forwarded-For header will be used, if GeoIPXForwardedFor is used, or else
$r->connection->remote_ip
is used. - $gm = $r->gm;
-
Returns the Geo::IP::Mirror object.
AUTOMATIC REDIRECTION
If Apache2::Geo::Mirror is used as
PerlModule Apache2::Geo::Mirror
<Location /CPAN>
PerlSetVar GeoIPDBFile "/usr/local/share/geoip/GeoIP.dat"
PerlSetVar GeoIPMirror "/usr/local/share/data/mirror.txt"
PerlSetVar GeoIPDefault "http://www.cpan.org/"
PerlResponseHandler Apache2::Geo::Mirror->auto_redirect
</Location>
then an automatic redirection is made. Within this, the directive
PerlSetVar GeoIPRobot "/path/to/a/robots.txt"
can be used to handle robots that honor a robots.txt file. This can be a physical file that exists on the system or, if it is set to the special value default, the string
User-agent: *
Disallow: /
will be used, which disallows robot access to anything.
Within automatic redirection, the X-Forwarded-For header wil be used to try to infer the IP address of the client.
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, 2009 Randy Kobes < randy.kobes@gmail.com >.
All rights reserved. This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.