geo

NGINX 中的 `geo` 指令定义了一个变量,该变量可以根据客户端 IP 地址或其他地理位置进行设置。 — NGINX HTTP Core

geo
http
语法geo $variable { default value; range1 value1; range2 value2; ... }
默认值none
上下文http
模块NGINX HTTP Core
参数block (1-2)

说明

`geo` 指令用于创建将客户端 IP 地址映射到变量的映射表,这些变量可在各种 NGINX 配置中使用。它在根据地理位置配置访问控制和管理请求路由时尤其有用。该指令可以定义 IPv4 和 IPv6 地址,并且可以嵌套在 `http` 上下文中。每条映射规则由一个地址(或地址范围)和一个可选变量组成,该变量可以包含一个值(例如用于允许或拒绝访问的 '1' 或 '0'),或者对于不匹配的地址设置为 'default'。 在 `geo` 块内,您可以指定单个 IP 地址、CIDR 表示法或地理范围。NGINX 将按照规则定义的顺序将客户端的 IP 地址与这些规则进行匹配。如果找到匹配项,NGINX 将相应地设置指定的变量。如果没有任何规则匹配某个地址,则会应用 `default` 指令设置的值。这使得 `geo` 成为创建基于不同客户端 IP 响应的动态配置(无论是用于负载均衡、访问控制还是应用配置)的强大工具。 需要注意的是,`geo` 指令必须在 `http` 块中定义,并且它不会在自身内部直接接受其他相关指令,这在复杂的 NGINX 配置中可能导致混淆。此外,该指令在 HTTP 层运行,并在根本上依赖于传入请求的网络细节,因此需要根据客户端请求的预期特征正确使用。

配置示例

geo $remote_addr {
    default 0;
    192.168.1.0/24 1;
    10.0.0.0/8 2;
}

确保 `geo` 块位于 `http` 上下文中;放在其他地方会导致错误。

使用 CIDR 表示法时,请确保语法正确以避免意外匹配。

请记住定义的顺序很重要;第一个匹配到的项将决定变量的值。