<!-- review: finished -->

<a id="http-geo"></a>

# Geo

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

<a id="configuration-example-16"></a>

## Ejemplo de configuración

```nginx
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;
}
```

<a id="directives-17"></a>

## Directivas

<a id="index-0"></a>

<a id="id1"></a>

### geo

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `geo` [$address] $variable { ... }   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | —                                    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http                                 |

Describe la dependencia de los valores de la variable especificada respecto a la dirección IP del cliente. Por defecto, la dirección se toma de la variable [$remote_addr](https://es.angie.software//angie/docs/configuration/modules/http/index.md#v-remote-addr), pero también puede tomarse de otra variable, por ejemplo:

```nginx
geo $arg_remote_addr $geo {
    ...;
}
```

#### NOTE
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 solicitudes.

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 como prefijos en notación CIDR (incluidas 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, se puede usar `0.0.0.0/0` y `::/0` 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.                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `proxy`           | define direcciones de confianza. Cuando una solicitud proviene de una dirección de confianza, se utilizará en su lugar una dirección del campo de encabezado de solicitud `X-Forwarded-For`. A diferencia de las direcciones regulares, las direcciones de confianza se verifican secuencialmente.                                                                                                                                                                                                         |
| `proxy_recursive` | habilita la búsqueda recursiva de direcciones. Si la búsqueda recursiva está deshabilitada, entonces en lugar de la dirección del cliente original que coincide con una de las direcciones de confianza, se utilizará la última dirección enviada en `X-Forwarded-For`. Si la búsqueda recursiva está habilitada, entonces en lugar de la dirección del cliente original que coincide con una de las direcciones de confianza, se utilizará la última dirección no confiable enviada en `X-Forwarded-For`. |
| `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.                                                                                                                                                                                                                                                                                                                    |
| `volatile`        | indica que la variable no es cacheable.                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |

Ejemplo:

```nginx
geo $country {
    default        ZZ;
    include        conf/geo.conf;
    delete         127.0.0.0/16;
    proxy          192.168.100.0/24;
    proxy          2001:0db8::/32;

    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:

```console
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 de descripción de rango:

```nginx
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;
}
```
