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