Geo#

El módulo crea variables cuyos valores dependen de la dirección IP del cliente.

Ejemplo de Configuración#

geo $geo {
    default        0;

    127.0.0.1      2;
    192.168.1.0/24 1;
    10.1.0.0/16    1;

    ::1            2;
    2001:0db8::/32 1;
}

Directivas#

geo#

Sintaxis

geo [$address] $variable { ... }

Predeterminado

Contexto

stream

Describe la dependencia de los valores de la variable especificada en la dirección IP del cliente. Por defecto, la dirección se toma de la variable $remote_addr, pero también puede tomarse de otra variable, por ejemplo:

geo $arg_remote_addr $geo {
    ...;
}

Nota

Dado que las variables se evalúan solo cuando se utilizan, la mera existencia de incluso un gran número de variables geo declaradas no causa ningún costo adicional para el procesamiento de las conexiones.

Si el valor de una variable no representa una dirección IP válida, se utiliza la dirección "255.255.255.255".

Las direcciones se especifican ya sea como prefijos en notación CIDR (incluyendo direcciones individuales) o como rangos.

También se admiten los siguientes parámetros especiales:

delete

elimina la red especificada

default

el valor asignado a la variable si la dirección del cliente no coincide con ninguna de las direcciones especificadas. Cuando las direcciones se especifican en notación CIDR, "0.0.0.0/0" y ":/0" pueden usarse en lugar de default. Cuando no se especifica default, el valor predeterminado será una cadena vacía

include

incluye un archivo con direcciones y valores. Puede haber varias inclusiones.

ranges

indica que las direcciones se especifican como rangos. Este parámetro debe ser el primero. Para acelerar la carga de una base geo, las direcciones deben colocarse en orden ascendente.

Ejemplo:

geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;

    127.0.0.0/24   US;
    127.0.0.1/32   RU;
    10.1.0.0/16    RU;
    192.168.1.0/24 UK;
}

El archivo conf/geo.conf podría contener las siguientes líneas:

10.2.0.0/16    RU;
192.168.2.0/24 RU;

Se utiliza el valor de la coincidencia más específica. Por ejemplo, para la dirección 127.0.0.1 se elegirá el valor RU, no US.

Ejemplo con rangos:

geo $country {
    ranges;
    default                   ZZ;
    127.0.0.0-127.0.0.0       US;
    127.0.0.1-127.0.0.1       RU;
    127.0.0.2-127.0.0.255     US;
    10.1.0.0-10.1.255.255     RU;
    192.168.1.0-192.168.1.255 UK;
}