Module ngx_http_api_module

ngx_http_api_module模块(1.13.3)提供 REST API,用于访问各种状态信息,动态配置上游服务器组以及管理key-value pairs,而无需重新配置 nginx。

Note

该模块取代了ngx_http_status_modulengx_http_upstream_conf_module模块。

使用PATCHPOST方法时,请确保有效载荷不超过buffer size以读取客户端请求正文,否则,可能会返回 413(请求实体太大)错误。

Note

此模块可作为commercial subscription的一部分使用。

Example Configuration

http {
    upstream backend {
        zone http_backend 64k;

        server backend1.example.com weight=5;
        server backend2.example.com;
    }

    proxy_cache_path /data/nginx/cache_backend keys_zone=cache_backend:10m;

    server {
        server_name backend.example.com;

        location / {
            proxy_pass  http://backend;
            proxy_cache cache_backend;

            health_check;
        }

        status_zone server_backend;
    }

    keyval_zone zone=one:32k state=one.keyval;
    keyval $arg_text $text zone=one;

    server {
        listen 127.0.0.1;

        location /api {
            api write=on;
            allow 127.0.0.1;
            deny all;
        }
    }
}

stream {
    upstream backend {
        zone stream_backend 64k;

        server backend1.example.com:12345 weight=5;
        server backend2.example.com:12345;
    }

    server {
        listen      127.0.0.1:12345;
        proxy_pass  backend;
        status_zone server_backend;
        health_check;
    }
}

所有 API 请求都在 URI 中包含受支持的 API version。具有此配置的 API 请求示例:

http://127.0.0.1/api/6/
http://127.0.0.1/api/6/nginx
http://127.0.0.1/api/6/connections
http://127.0.0.1/api/6/http/requests
http://127.0.0.1/api/6/http/server_zones/server_backend
http://127.0.0.1/api/6/http/caches/cache_backend
http://127.0.0.1/api/6/http/upstreams/backend
http://127.0.0.1/api/6/http/upstreams/backend/servers/
http://127.0.0.1/api/6/http/upstreams/backend/servers/1
http://127.0.0.1/api/6/http/keyvals/one?key=arg1
http://127.0.0.1/api/6/stream/
http://127.0.0.1/api/6/stream/server_zones/server_backend
http://127.0.0.1/api/6/stream/upstreams/
http://127.0.0.1/api/6/stream/upstreams/backend
http://127.0.0.1/api/6/stream/upstreams/backend/servers/1

Directives

Syntax: api [write=on|off];
Default:
Context: location

打开周围位置的 REST API 接口。可以访问此位置limited

write参数确定 API 是只读的还是读写的。默认情况下,API 是只读的。

所有 API 请求都应在 URI 中包含受支持的 API 版本。如果请求 URI 等于位置前缀,则返回支持的 API 版本列表。当前的 API 版本是“ 6”。

请求行中的可选“ fields”参数指定将输出所请求对象的哪些字段:

http://127.0.0.1/api/6/nginx?fields=version,build

Syntax: status_zone zone;
Default:
Context: server , location , if in location

该指令出现在 1.13.12 版中。

启用对指定的zone中的虚拟httpstream服务器状态信息的收集。多个服务器可以共享同一区域。

从 1.17.0 开始,可以按照location收集状态信息。特殊值off禁用嵌套位置块中的统计信息收集。注意,统计是在处理结束的位置的上下文中收集的。如果在请求处理期间发生internal redirect,它可能与原始位置不同。

Compatibility

Endpoints

/

返回根端点的列表。

Possible responses:

/nginx

返回 nginx 版本,内部版本名称,地址,配置重载次数,主进程和工作进程的 ID。

Request parameters:

Possible responses:

/processes

返回异常终止和重新生成的子进程的数量。

Possible responses:

重置异常终止和重生的子进程的计数器。

Possible responses:

/connections

返回客户端连接的统计信息。

Request parameters:

Possible responses:

重置接受和删除的客户端连接的统计信息。

Possible responses:

/slabs/

使用平板分配器返回每个共享内存区域的平板状态。

Request parameters:

Possible responses:

/slabs/

Supported methods:

使用平板分配器返回特定共享内存区域的平板状态。

Request parameters:

Possible responses:

重置每个内存插槽的“ reqs”和“ fails”度量。

Possible responses:

/http/

返回一级 HTTP 端点的列表。

Possible responses:

/http/requests

返回客户端 HTTP 请求的状态。

Request parameters:

Possible responses:

重置客户端 HTTP 请求总数。

Possible responses:

/http/server_zones/

返回每个 HTTP server zone的状态信息。

Request parameters:

Possible responses:

/http/server_zones/

Supported methods:

返回特定 HTTP 服务器区域的状态。

Request parameters:

Possible responses:

重置特定 HTTP 服务器区域中接受和丢弃的请求,响应,已接收和已发送字节的统计信息。

Possible responses:

/http/location_zones/

返回每个 HTTP location zone的状态信息。

Request parameters:

Possible responses:

/http/location_zones/

Supported methods:

返回特定 HTTP location zone的状态。

Request parameters:

Possible responses:

重置特定位置区域中接受和丢弃的请求,响应,已接收和已发送字节的统计信息。

Possible responses:

/http/caches/

返回由proxy_cache_path和其他“ *_cache_path”指令配置的每个缓存的状态。

Request parameters:

Possible responses:

/http/caches/

Supported methods:

返回特定缓存的状态。

Request parameters:

Possible responses:

重置特定缓存区域中缓存命中/未命中的统计信息。

Possible responses:

/http/limit_conns/

返回每个 HTTP limit_conn zone的状态信息。

Request parameters:

Possible responses:

/http/limit_conns/

Supported methods:

返回特定 HTTP limit_conn zone的状态。

Request parameters:

Possible responses:

重置连接限制统计信息。

Possible responses:

/http/limit_reqs/

返回每个 HTTP limit_req zone的状态信息。

Request parameters:

Possible responses:

/http/limit_reqs/

Supported methods:

返回特定 HTTP limit_req zone的状态。

Request parameters:

Possible responses:

重置请求限制统计信息。

Possible responses:

/http/upstreams/

返回每个 HTTP 上游服务器组及其服务器的状态。

Request parameters:

Possible responses:

/http/upstreams//

Supported methods:

返回特定的 HTTP 上游服务器组及其服务器的状态。

Request parameters:

Possible responses:

重置上游服务器组中每个上游服务器的统计信息和队列统计信息。

Possible responses:

/http/upstreams//servers/

Supported methods:

返回特定 HTTP 上游服务器组中每个服务器的配置。

Possible responses:

将新服务器添加到 HTTP 上游服务器组。服务器参数以 JSON 格式指定。

Request parameters:

Possible responses:

/http/upstreams//servers/

Supported methods:

返回 HTTP 上游服务器组中特定服务器的配置。

Possible responses:

修改 HTTP 上游服务器组中特定服务器的设置。服务器参数以 JSON 格式指定。

Request parameters:

Possible responses:

从 HTTP 上游服务器组中删除服务器。

Possible responses:

/http/keyvals/

返回每个 HTTP 键值共享内存zone的键值对。

Request parameters:

Possible responses:

/http/keyvals/

Supported methods:

返回存储在特定 HTTP keyval 共享内存zone中的键/值对。

Request parameters:

Possible responses:

将新的键值对添加到 HTTP keyval 共享内存zone。如果 HTTP keyval 共享内存区域为空,则可以输入几个键值对。

Request parameters:

Possible responses:

更改键值对中所选键的值,通过将键值设置为null来删除键,更改键值对的到期时间。如果启用了群集中的关键密钥区域的synchronization,则仅删除目标群集节点上的密钥。可以使用expire参数(覆盖keyval_zone指令的timeout参数)为键值对指定过期时间(以毫秒为单位)。

Request parameters:

Possible responses:

从 HTTP keyval 共享内存zone删除所有键值对。如果启用了群集中synchronization的关键密钥区,则仅清空目标集群节点上的关键密钥区。

Possible responses:

/stream/

返回一级流端点的列表。

Possible responses:

/stream/server_zones/

返回每个流server zone的状态信息。

Request parameters:

Possible responses:

/stream/server_zones/

Supported methods:

返回特定流服务器区域的状态。

Request parameters:

Possible responses:

重置特定流服务器区域中接受和丢弃的连接,会话,已接收和已发送字节的统计信息。

Possible responses:

/stream/limit_conns/

返回每个流limit_conn zone的状态信息。

Request parameters:

Possible responses:

/stream/limit_conns/

Supported methods:

返回特定流limit_conn zone的状态。

Request parameters:

Possible responses:

重置连接限制统计信息。

Possible responses:

/stream/upstreams/

返回每个流上游服务器组及其服务器的状态。

Request parameters:

Possible responses:

/stream/upstreams//

Supported methods:

返回特定流上游服务器组及其服务器的状态。

Request parameters:

Possible responses:

重置上游服务器组中每个上游服务器的统计信息。

Possible responses:

/stream/upstreams//servers/

Supported methods:

返回特定流上游服务器组中每个服务器的配置。

Possible responses:

将新服务器添加到流上游服务器组。服务器参数以 JSON 格式指定。

Request parameters:

Possible responses:

/stream/upstreams//servers/

Supported methods:

返回流上游服务器组中特定服务器的配置。

Possible responses:

修改流上游服务器组中特定服务器的设置。服务器参数以 JSON 格式指定。

Request parameters:

Possible responses:

从流服务器组中删除服务器。

Possible responses:

/stream/keyvals/

返回每个流 keyval 共享内存zone的键/值对。

Request parameters:

Possible responses:

/stream/keyvals/

Supported methods:

返回存储在特定流 keyval 共享内存zone中的键值对。

Request parameters:

Possible responses:

将新的键/值对添加到流 keyval 共享内存zone。如果流 keyval 共享存储区为空,则可以输入几个键值对。

Request parameters:

Possible responses:

更改键值对中所选键的值,通过将键值设置为null来删除键,更改键值对的到期时间。如果启用了群集中的关键密钥区域的synchronization,则仅删除目标群集节点上的密钥。使用expire参数指定有效时间(以毫秒为单位),该参数将覆盖keyval_zone指令的timeout参数。

Request parameters:

Possible responses:

从流 keyval 共享内存zone中删除所有键值对。如果启用了群集中synchronization的关键密钥区,则仅清空目标集群节点上的关键密钥区。

Possible responses:

/stream/zone_sync/

返回集群节点的同步状态。

Possible responses:

/resolvers/

返回每个resolver zone的状态信息。

Request parameters:

Possible responses:

/resolvers/

Supported methods:

返回存储在特定解析器zone中的统计信息。

Request parameters:

Possible responses:

重置特定解析器区域中的统计信息。

Possible responses:

/ssl

返回 SSL 统计信息。

Request parameters:

Possible responses:

重置 SSL 握手和会话重用的计数器。

Possible responses:

Response Objects

有关 Nginx 的一般信息:

Example:

{
  "nginx" : {
    "version" : "1.17.3",
    "build" : "nginx-plus-r19",
    "address" : "206.251.255.64",
    "generation" : 6,
    "load_timestamp" : "2019-10-01T11:15:44.467Z",
    "timestamp" : "2019-10-01T09:26:07.305Z",
    "pid" : 32212,
    "ppid" : 32210
  }
}

Example:

{
  "respawned" : 0
}

接受,断开,活动和空闲连接的数量。

Example:

{
  "accepted" : 4968119,
  "dropped" : 0,
  "active" : 5,
  "idle" : 117
}

Example:

{
  "handshakes" : 79572,
  "handshakes_failed" : 21025,
  "session_reuses" : 15762
}

Memory Slot”对象的集合

Example:

{
  "pages" : {
    "used" : 1143,
    "free" : 2928
  },
  "slots" : {
    "8" : {
      "used" : 0,
      "free" : 0,
      "reqs" : 0,
      "fails" : 0
    },
    "16" : {
      "used" : 0,
      "free" : 0,
      "reqs" : 0,
      "fails" : 0
    },
    "32" : {
      "used" : 0,
      "free" : 0,
      "reqs" : 0,
      "fails" : 0
    },
    "64" : {
      "used" : 1,
      "free" : 63,
      "reqs" : 1,
      "fails" : 0
    },
    "128" : {
      "used" : 0,
      "free" : 0,
      "reqs" : 0,
      "fails" : 0
    },
    "256" : {
      "used" : 18078,
      "free" : 178,
      "reqs" : 1635736,
      "fails" : 0
    }
  }
}

Example:

{
  "total" : 10624511,
  "current" : 4
}

Example:

{
  "processing" : 1,
  "requests" : 706690,
  "responses" : {
    "1xx" : 0,
    "2xx" : 699482,
    "3xx" : 4522,
    "4xx" : 907,
    "5xx" : 266,
    "total" : 705177
  },
  "discarded" : 1513,
  "received" : 172711587,
  "sent" : 19415530115
}

Example:

{
  "requests" : 706690,
  "responses" : {
    "1xx" : 0,
    "2xx" : 699482,
    "3xx" : 4522,
    "4xx" : 907,
    "5xx" : 266,
    "total" : 705177
  },
  "discarded" : 1513,
  "received" : 172711587,
  "sent" : 19415530115
}

Example:

{
  "size" : 530915328,
  "max_size" : 536870912,
  "cold" : false,
  "hit" : {
    "responses" : 254032,
    "bytes" : 6685627875
  },
  "stale" : {
    "responses" : 0,
    "bytes" : 0
  },
  "updating" : {
    "responses" : 0,
    "bytes" : 0
  },
  "revalidated" : {
    "responses" : 0,
    "bytes" : 0
  },
  "miss" : {
    "responses" : 1619201,
    "bytes" : 53841943822
  },
  "expired" : {
    "responses" : 45859,
    "bytes" : 1656847080,
    "responses_written" : 44992,
    "bytes_written" : 1641825173
  },
  "bypass" : {
    "responses" : 200187,
    "bytes" : 5510647548,
    "responses_written" : 200173,
    "bytes_written" : 44992
  }
}

Example:

{
  "passed" : 15,
  "rejected" : 0,
  "rejected_dry_run" : 2
}

Example:

{
  "passed" : 15,
  "delayed" : 4,
  "rejected" : 0,
  "delayed_dry_run" : 1,
  "rejected_dry_run" : 2
}

Example:

{
  "upstream_backend" : {
    "peers" : [
      {
        "id" : 0,
        "server" : "10.0.0.1:8088",
        "name" : "10.0.0.1:8088",
        "backup" : false,
        "weight" : 5,
        "state" : "up",
        "active" : 0,
        "max_conns" : 20,
        "requests" : 667231,
        "header_time" : 20,
        "response_time" : 36,
        "responses" : {
          "1xx" : 0,
          "2xx" : 666310,
          "3xx" : 0,
          "4xx" : 915,
          "5xx" : 6,
          "total" : 667231
        },
        "sent" : 251946292,
        "received" : 19222475454,
        "fails" : 0,
        "unavail" : 0,
        "health_checks" : {
          "checks" : 26214,
          "fails" : 0,
          "unhealthy" : 0,
          "last_passed" : true
        },
        "downtime" : 0,
        "downstart" : "2019-10-01T11:09:21.602Z",
        "selected" : "2019-10-01T15:01:25.000Z"
      },
      {
        "id" : 1,
        "server" : "10.0.0.1:8089",
        "name" : "10.0.0.1:8089",
        "backup" : true,
        "weight" : 1,
        "state" : "unhealthy",
        "active" : 0,
        "max_conns" : 20,
        "requests" : 0,
        "responses" : {
          "1xx" : 0,
          "2xx" : 0,
          "3xx" : 0,
          "4xx" : 0,
          "5xx" : 0,
          "total" : 0
        },
        "sent" : 0,
        "received" : 0,
        "fails" : 0,
        "unavail" : 0,
        "health_checks" : {
          "checks" : 26284,
          "fails" : 26284,
          "unhealthy" : 1,
          "last_passed" : false
        },
        "downtime" : 262925617,
        "downstart" : "2019-10-01T11:09:21.602Z",
        "selected" : "2019-10-01T15:01:25.000Z"
      }
    ],
    "keepalive" : 0,
    "zombies" : 0,
    "zone" : "upstream_backend"
  }
}

HTTP 上游server的动态可配置参数:

Example:

{
  "id" : 1,
  "server" : "10.0.0.1:8089",
  "weight" : 4,
  "max_conns" : 0,
  "max_fails" : 0,
  "fail_timeout" : "10s",
  "slow_start" : "10s",
  "route" : "",
  "backup" : true,
  "down" : true
}

使用 GET 方法时,HTTP keyval 共享内存区域的内容。

Example:

{
  "key1" : "value1",
  "key2" : "value2",
  "key3" : "value3"
}

使用 POST 或 PATCH 方法时,HTTP keyval 共享内存区域的内容。

Example:

{
  "key1" : "value1",
  "key2" : "value2",
  "key3" : {
    "value" : "value3",
    "expire" : 30000
  }
}

Example:

{
  "dns" : {
    "processing" : 1,
    "connections" : 155569,
    "sessions" : {
      "2xx" : 155564,
      "4xx" : 0,
      "5xx" : 0,
      "total" : 155569
    },
    "discarded" : 0,
    "received" : 4200363,
    "sent" : 20489184
  }
}

Example:

{
  "passed" : 15,
  "rejected" : 0,
  "rejected_dry_run" : 2
}

Example:

{
  "dns" : {
    "peers" : [
      {
        "id" : 0,
        "server" : "10.0.0.1:12347",
        "name" : "10.0.0.1:12347",
        "backup" : false,
        "weight" : 5,
        "state" : "up",
        "active" : 0,
        "max_conns" : 50,
        "connections" : 667231,
        "sent" : 251946292,
        "received" : 19222475454,
        "fails" : 0,
        "unavail" : 0,
        "health_checks" : {
          "checks" : 26214,
          "fails" : 0,
          "unhealthy" : 0,
          "last_passed" : true
        },
        "downtime" : 0,
        "downstart" : "2019-10-01T11:09:21.602Z",
        "selected" : "2019-10-01T15:01:25.000Z"
      },
      {
        "id" : 1,
        "server" : "10.0.0.1:12348",
        "name" : "10.0.0.1:12348",
        "backup" : true,
        "weight" : 1,
        "state" : "unhealthy",
        "active" : 0,
        "max_conns" : 50,
        "connections" : 0,
        "sent" : 0,
        "received" : 0,
        "fails" : 0,
        "unavail" : 0,
        "health_checks" : {
          "checks" : 26284,
          "fails" : 26284,
          "unhealthy" : 1,
          "last_passed" : false
        },
        "downtime" : 262925617,
        "downstart" : "2019-10-01T11:09:21.602Z",
        "selected" : "2019-10-01T15:01:25.000Z"
      }
    ],
    "zombies" : 0,
    "zone" : "dns"
  }
}

上游server的流的动态可配置参数:

Example:

{
  "id" : 0,
  "server" : "10.0.0.1:12348",
  "weight" : 1,
  "max_conns" : 0,
  "max_fails" : 1,
  "fail_timeout" : "10s",
  "slow_start" : 0,
  "backup" : false,
  "down" : false
}

使用 GET 方法时,流 keyval 共享内存区域的内容。

Example:

{
  "key1" : "value1",
  "key2" : "value2",
  "key3" : "value3"
}

使用 POST 或 PATCH 方法时,流密钥共享存储区的内容。

Example:

{
  "key1" : "value1",
  "key2" : "value2",
  "key3" : {
    "value" : "value3",
    "expire" : 30000
  }
}

Sync Zone”对象的集合

Example:

{
  "zones" : {
    "zone1" : {
      "records_pending" : 2061,
      "records_total" : 260575
    },
    "zone2" : {
      "records_pending" : 0,
      "records_total" : 14749
    }
  },
  "status" : {
    "bytes_in" : 1364923761,
    "msgs_in" : 337236,
    "msgs_out" : 346717,
    "bytes_out" : 1402765472,
    "nodes_online" : 15
  }
}

共享内存区域的同步状态。

每个特定resolver zone的 DNS 请求和响应的统计信息。

Example:

{
  "resolver_zone1" : {
    "requests" : {
      "name" : 25460,
      "srv" : 130,
      "addr" : 2580
    },
    "responses" : {
      "noerror" : 26499,
      "formerr" : 0,
      "servfail" : 3,
      "nxdomain" : 0,
      "notimp" : 0,
      "refused" : 0,
      "timedout" : 243,
      "unknown" : 478
    }
  }
}

nginx 错误对象。

首页