<!-- review: finished -->

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

# Geo

O módulo cria variáveis com valores dependendo do endereço IP do cliente.

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

## Exemplo de Configuração

```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>

## Diretivas

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

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

### geo

| [Sintaxe](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)   | `geo` [$address] $variable { ... }   |
|-------------------------------------------------------------------------------------------|--------------------------------------|
| Padrão                                                                                    | —                                    |
| [Contexto](https://pt.angie.software//angie/docs/configuration/configfile.md#configfile)  | http                                 |

Descreve a dependência dos valores da variável especificada no endereço IP do cliente. Por padrão, o endereço é obtido da variável [$remote_addr](https://pt.angie.software//angie/docs/configuration/modules/http/index.md#v-remote-addr), mas também pode ser obtido de outra variável, por exemplo:

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

#### NOTE
Como as variáveis são avaliadas apenas quando usadas, a mera existência de até mesmo um grande número de variáveis `geo` declaradas não causa custos extras para o processamento de requisições.

Se o valor de uma variável não representa um endereço IP válido, então o endereço "255.255.255.255" é usado.

Os endereços são especificados como prefixos em notação CIDR (incluindo endereços individuais) ou como intervalos.

Os seguintes parâmetros especiais também são suportados:

| `delete`          | exclui a rede especificada                                                                                                                                                                                                                                                                                                                                                                                                                            |
|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `default`         | o valor definido para a variável se o endereço do cliente não corresponder a nenhum dos endereços especificados. Quando os endereços são especificados em notação CIDR, `0.0.0.0/0` e `::/0` podem ser usados em vez de `default`. Quando `default` não é especificado, o valor padrão será uma string vazia                                                                                                                                          |
| `include`         | inclui um arquivo com endereços e valores. Pode haver várias inclusões.                                                                                                                                                                                                                                                                                                                                                                               |
| `proxy`           | define endereços confiáveis. Quando uma requisição vem de um endereço confiável, um endereço do campo de cabeçalho de requisição `X-Forwarded-For` será usado em seu lugar. Em contraste com os endereços regulares, endereços confiáveis são verificados sequencialmente.                                                                                                                                                                            |
| `proxy_recursive` | habilita busca recursiva de endereço. Se a busca recursiva estiver desabilitada, então em vez do endereço original do cliente que corresponde a um dos endereços confiáveis, o último endereço enviado em `X-Forwarded-For` será usado. Se a busca recursiva estiver habilitada, então em vez do endereço original do cliente que corresponde a um dos endereços confiáveis, o último endereço não confiável enviado em `X-Forwarded-For` será usado. |
| `ranges`          | indica que os endereços são especificados como intervalos. Este parâmetro deve ser o primeiro. Para acelerar o carregamento de uma base geo, os endereços devem ser colocados em ordem crescente.                                                                                                                                                                                                                                                     |
| `volatile`        | indica que a variável não é cacheável.                                                                                                                                                                                                                                                                                                                                                                                                                |

Exemplo:

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

O arquivo `conf/geo.conf` poderia conter as seguintes linhas:

```console
10.2.0.0/16    RU;
192.168.2.0/24 RU;
```

O valor da correspondência mais específica é usado. Por exemplo, para o endereço `127.0.0.1`, o valor `RU` será escolhido, não `US`.

Exemplo de descrição de intervalo:

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