FAQ

Page Discussion Edit History

HttpGeoModule

Contents

[edit] Synopsis

This module makes available variables, whose values depend on the IP address of the client. When combined with Geo IP module allows for very elaborate rules serving content according to the geolocation context.

Here'a an example configuration:

geo  $geo  { # the variable created is $geo
  default          0;
  127.0.0.1/32     2;
  192.168.1.0/24   1;
  10.1.0.0/16      1;
}

[edit] Directives

[edit] geo

Syntax: geo [ $address ] $variable { ... }
Default:
Context: http
Reference:geo


This directive describes the dependency of the value of the defined variable on the client's IP address. By default, the IP address used for doing the lookup is $remote_addr, but since version 0.7.27 it is possible to specify an another variable.

Note that in the case of an invalid IP address, the value 255.255.255.255 is used.

Here we're using $arg_remote_addr:

 geo  $arg_remote_addr $geo {
   (...)
 }

IP addresses are enumerated in CIDR notation. There are four parameters for this directive:

  • delete – deletes the specified network (0.7.23).
  • default - the value of the defined variable, if the client address does not correspond to any of the enumerated addresses in the directive clauses. Any IP address not matching the enumerated IP adresses is matched by this clause that sets the value of the defined variable.
  • include - specifies a file mapping addresses to values of the defined variable.

Multiple files can be included.

  • proxy - specifies the address of a proxy server (requires Nginx version ≥ 0.8.7). NEED MORE DESCRIPTION...
  • ranges – specifies that the IP addresses enumerated are in the form of ranges (requires Nginx version ≥ 0.7.23) instead of CIDR notation. This directive must precede all other .
 geo  $country  {
   default          no; # Sets the default value (client doesn't match any of the enumerated IP addresses) to "no"
   include          conf/geo.conf;
   127.0.0.0/24     us;
   127.0.0.1/32     ru;
   10.1.0.0/16      ru;
   192.168.1.0/24   uk;
 }

In the file conf/geo.conf:

 10.2.0.0/16      ru;
 192.168.2.0/24   ru;

The value will be the the one with maximum agreement. For example, the IP address 127.0.0.1 will get the value "ru", but not "us".

Example with ranges:

 geo  $country  {
   ranges;
   default                    no; # note that ranges precedes all other directives
   127.0.0.0-127.0.0.0        us;
   127.0.0.1-127.0.0.1        ru;
   127.0.0.1-127.0.0.255      us;
   10.1.0.0-10.1.255.255      ru;
   192.168.1.0-192.168.1.255  uk; 
 }

[edit] References