HttpGeoModule

WARNING: this article is obsoleted. Please refer to http://nginx.org/en/docs/ for the latest official documentation.

= 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; }

= Directives =

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 : geo $arg_remote_addr $geo { (...) }

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

Multiple files can be included.
 * 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.
 * proxy - specifies the address of a proxy server (requires Nginx version &ge; 0.8.7). NEED MORE DESCRIPTION...
 * ranges – specifies that the IP addresses enumerated are in the form of ranges (requires Nginx version &ge; 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; }

= References =
 * Original Documentation
 * HWLoadbalancerCheckErrors
 * Creating geo.conf From MaxMind GeoIP Country Database