sts: Nginx 流服务器流量状态模块
安装
您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:
- RedHat Enterprise Linux 7、8、9 和 10
- CentOS 7、8、9
- AlmaLinux 8、9
- Rocky Linux 8、9
- Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sts
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sts
通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用该模块:
load_module modules/ngx_http_stream_server_traffic_status_module.so;
本文档描述了 nginx-module-sts v0.1.1,于 2018 年 7 月 4 日发布。
Nginx 流服务器流量状态模块
截图

概述
http {
stream_server_traffic_status_zone;
...
server {
...
location /status {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
}
}
stream {
server_traffic_status_zone;
...
server {
...
}
}
描述
这是一个 Nginx 模块,提供对流服务器流量状态信息的访问。 这是 nginx-module-vts 的移植版本,支持与 nginx-module-vts 相同的功能。 它包含当前状态,例如服务器、上游和用户定义的过滤器。
首先,流块中需要 server_traffic_status_zone 指令,HTTP 块中需要 stream_server_traffic_status_zone 指令,然后如果设置了 stream_server_traffic_status_display 指令,可以通过以下方式访问:
- /status/format/json
- 如果请求
/status/format/json,将响应一个包含当前活动数据的 JSON 文档,以用于实时仪表板和第三方监控工具。 - /status/format/html
- 如果请求
/status/format/html,将响应一个内置的 HTML 实时仪表板,该仪表板内部请求/status/format/json。 - /status/format/jsonp
- 如果请求
/status/format/jsonp,将响应一个包含当前活动数据的 JSONP 回调函数,以用于实时仪表板和第三方监控工具。 - /status/format/prometheus
- 如果请求
/status/format/prometheus,将响应一个包含当前活动数据的 prometheus 文档。 - /status/control
- 如果请求
/status/control,将响应一个 JSON 文档,在通过查询字符串重置或删除区域后。请参见 Control。
JSON 文档包含如下内容:
{
"hostName": ...,
"nginxVersion": ...,
"loadMsec": ...,
"nowMsec": ...,
"connections": {
"active":...,
"reading":...,
"writing":...,
"waiting":...,
"accepted":...,
"handled":...,
"requests":...
},
"sharedZones": {
"name":...,
"maxSize":...,
"usedSize":...,
"usedNode":...
},
"streamServerZones": {
"...":{
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...],
"counters":[...]
}
}
...
},
"streamFilterZones": {
"...":{
"...":{
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...],
"counters":[...]
}
},
...
},
...
},
"streamUpstreamZones": {
"...":[
{
"server":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...]
"counters":[...]
},
"uSessionMsecCounter":...,
"uSessionMsec":...,
"uSessionMsecs":{
"times":[...],
"msecs":[...]
},
"uSessionBuckets":{
"msecs":[...]
"counters":[...]
},
"uConnectMsecCounter":...,
"uConnectMsec":...,
"uConnectMsecs":{
"times":[...],
"msecs":[...]
},
"uConnectBuckets":{
"msecs":[...]
"counters":[...]
},
"uFirstByteMsecCounter":...,
"uFirstByteMsec":...,
"uFirstByteMsecs":{
"times":[...],
"msecs":[...]
},
"uFirstByteBuckets":{
"msecs":[...]
"counters":[...]
},
"weight":...,
"maxFails":...,
"failTimeout":...,
"backup":...,
"down":...
}
...
],
...
}
}
- main
- 基本版本,正常运行时间((nowMsec - loadMsec)/1000)
- nowMsec, loadMsec 是毫秒。
- connections
- 总连接数和请求数(与 NGINX 中的 stub_status_module 相同)
- streamServerZones
- 每个服务器区域的流量(进/出)和请求及响应计数和状态(1xx,2xx...)命中率
- 总流量(进/出)和请求及响应计数(区域名称为
*)和命中率 - streamFilterZones
- 通过
server_traffic_status_filter_by_set_key指令过滤的每个服务器区域的流量(进/出)和请求及响应计数和状态(1xx,2xx...)命中率 - 通过
server_traffic_status_filter_by_set_key指令过滤的总流量(进/出)和请求及响应计数(区域名称为*)和命中率 - streamUpstreamZones
- 每个上游组中每个服务器的流量(进/出)和请求及响应计数
- nginx.conf 中的当前设置(weight, maxfails, failtimeout...)
指令 stream_server_traffic_status_display_format 设置默认输出格式,可以是 json、jsonp、html、prometheus 之一。(默认:json)
流量计算如下:
- streamServerZones
- in += requested_bytes
- out += sent_bytes
- streamFilterZones
- in += requested_bytes 通过过滤器
- out += sent_bytes 通过过滤器
- streamUpstreamZones
- in += requested_bytes 通过 ServerZones
- out += sent_bytes 通过 ServerZones
所有计算在 Nginx 的日志处理阶段进行。
注意事项: 此模块依赖于 nginx 日志系统(NGX_STREAM_LOG_PHASE:nginx 流的最后阶段),因此在某些情况下,流量可能与实际带宽流量不同。
Websocket、取消的下载可能导致不准确。
模块的工作与 access_log 指令的 "on" 或 "off" 无关。
再次强调,此模块在 "access_log off" 时也能正常工作。
控制
可以通过查询字符串重置或删除流量区域。 请求将响应一个 JSON 文档。
- URI 语法
- /
{status_uri}/control?cmd={command}&group={group}&zone={name}
http {
stream_server_traffic_status_zone;
...
server {
server_name example.org;
...
location /status {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
} }
}
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
server_traffic_status_filter_by_set_key $geoip_country_code country::*;
server {
...
}
...
}
如果按上述方式设置,则控制 URI 类似于 example.org/status/control。
可用的请求参数如下:
* cmd=\<status|reset|delete>
* status
* 返回流量区域的状态,格式为 json,类似于 status/format/json。
* reset
* 重置流量区域而不删除共享内存中的节点。(= 初始化为 0)
* delete
* 删除共享内存中的流量区域。当重新请求时会重新创建。
* group=\<server|filter|upstream@alone|upstream@group|*>
* server
* filter
* upstream@alone
* upstream@group
* *
* zone=name
* server
* name
* filter
* filter_group@name
* upstream@group
* upstream_group@name
* upstream@alone
* @name
实时获取流量区域状态
这与 status/format/json 类似,只是可以获取每个区域。
获取所有区域
- 与
status/format/json完全相同。 - /status/control?cmd=status&group=*
获取组区域
- streamServerZones
- /status/control?cmd=status&group=server&zone=*
- streamFilterZones
- /status/control?cmd=status&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=status&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=status&group=upstream@alone&zone=*
获取每个区域
- streamServerZones 中的单个区域
- /status/control?cmd=status&group=server&zone=
name - streamFilterZones 中的单个区域
- /status/control?cmd=status&group=filter&zone=
filter_group@name - streamUpstreamZones 中的单个区域
- /status/control?cmd=status&group=upstream@group&zone=
upstream_group@name - streamUpstreamZones::nogroups 中的单个区域
- /status/control?cmd=status&group=upstream@alone&zone=
name
实时重置流量区域
将指定区域的值重置为 0。
重置所有区域
- /status/control?cmd=reset&group=*
重置组区域
- streamServerZones
- /status/control?cmd=reset&group=server&zone=*
- streamFilterZones
- /status/control?cmd=reset&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=reset&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=reset&group=upstream@alone&zone=*
重置每个区域
- streamServerZones 中的单个区域
- /status/control?cmd=reset&group=server&zone=
name - streamFilterZones 中的单个区域
- /status/control?cmd=reset&group=filter&zone=
filter_group@name - streamUpstreamZones 中的单个区域
- /status/control?cmd=reset&group=upstream@group&zone=
upstream_group@name - streamUpstreamZones::nogroups 中的单个区域
- /status/control?cmd=reset&group=upstream@alone&zone=
name
实时删除流量区域
删除共享内存中的指定区域。
删除所有区域
- /status/control?cmd=delete&group=*
删除组区域
- streamServerZones
- /status/control?cmd=delete&group=server&zone=*
- streamFilterZones
- /status/control?cmd=delete&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=delete&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=delete&group=upstream@alone&zone=*
删除每个区域
- streamServerZones 中的单个区域
- /status/control?cmd=delete&group=server&zone=
name - streamFilterZones 中的单个区域
- /status/control?cmd=delete&group=filter&zone=
filter_group@name - streamUpstreamZones 中的单个区域
- /status/control?cmd=delete&group=upstream@group&zone=
upstream_group@name - streamUpstreamZones::nogroups 中的单个区域
- /status/control?cmd=delete&group=upstream@alone&zone=
name
JSON
以下状态信息以 JSON 格式提供:
状态使用的 Json
/{status_uri}/format/json
/{status_uri}/control?cmd=status&...
- hostName
- 主机名。
- nginxVersion
- 提供的版本。
- loadMsec
- 加载进程时间(以毫秒为单位)。
- nowMsec
- 当前时间(以毫秒为单位)。
- connections
- active
- 当前活动客户端连接的数量。
- reading
- 正在读取的客户端连接总数。
- writing
- 正在写入的客户端连接总数。
- waiting
- 等待的客户端连接总数。
- accepted
- 已接受的客户端连接总数。
- handled
- 已处理的客户端连接总数。
- requests
- 请求的客户端连接总数。
- sharedZones
- name
- 配置中指定的共享内存名称。(默认:
stream_server_traffic_status)
- 配置中指定的共享内存名称。(默认:
- maxSize
- 配置中指定的共享内存的最大大小限制。
- usedSize
- 当前共享内存的大小。
- usedNode
- 当前使用共享内存的节点数量。可以使用以下公式获取每个节点的近似大小:(usedSize / usedNode)
- streamServerZones
- connectCounter
- 从客户端接收到的请求总数。
- inBytes
- 从客户端接收到的字节总数。
- outBytes
- 发送给客户端的字节总数。
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
- sessionMsecCounter
- 累计请求处理时间(以毫秒为单位)。
- sessionMsec
- 请求处理时间的平均值(以毫秒为单位)。
- sessionMsecs
- times
- 请求处理时间的毫秒数。
- msecs
- 请求处理时间(以毫秒为单位)。
- sessionBuckets
- msecs
- 由
server_traffic_status_histogram_buckets指令设置的直方图的桶值。 - counters
- 每个桶值大于或等于请求处理时间的累计值。
- streamFilterZones
- 提供与
streamServerZones相同的字段,只是包含了组名称。 - streamUpstreamZones
- server
- 服务器的地址。
- connectCounter
- 转发到此服务器的客户端连接总数。
- inBytes
- 从此服务器接收到的字节总数。
- outBytes
- 发送到此服务器的字节总数。
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
- sessionMsecCounter
- 包括上游的累计请求处理时间(以毫秒为单位)。
- sessionMsec
- 包括上游的请求处理时间的平均值(以毫秒为单位)。
- sessionMsecs
- times
- 请求处理时间的毫秒数。
- msecs
- 包括上游的请求处理时间(以毫秒为单位)。
- sessionBuckets
- msecs
- 由
server_traffic_status_histogram_buckets指令设置的直方图的桶值。 - counters
- 每个桶值大于或等于连接到上游服务器的时间的累计值。
- uSessionMsecCounter
- 累计连接到上游服务器的会话持续时间(以毫秒为单位)。
- uSessionMsec
- 连接到上游服务器的会话持续时间的平均值(以毫秒为单位)。
- uSessionMsecs
- times
- 请求处理时间的毫秒数。
- msecs
- 连接到上游服务器的会话持续时间(以毫秒为单位)。
- uSessionBuckets
- msecs
- 由
server_traffic_status_histogram_buckets指令设置的直方图的桶值。 - counters
- 每个桶值大于或等于连接到上游服务器的会话持续时间的累计值。
- uConnectMsecCounter
- 累计连接到上游服务器的时间(以毫秒为单位)。
- uConnectMsec
- 连接到上游服务器的时间的平均值(以毫秒为单位)(1.11.4)。
- uConnectMsecs
- times
- 请求处理时间的毫秒数。
- msecs
- 连接到上游服务器的时间(以毫秒为单位)。
- uConnectBuckets
- msecs
- 由
server_traffic_status_histogram_buckets指令设置的直方图的桶值。 - counters
- 每个桶值大于或等于连接到上游服务器的时间的累计值。
- uFirstByteMsecCounter
- 累计接收第一字节数据的时间(以毫秒为单位)。
- uFirstByteMsec
- 接收第一字节数据的时间的平均值(以毫秒为单位)(1.11.4)。
- uFirstByteMsecs
- times
- 请求处理时间的毫秒数。
- msecs
- 接收第一字节数据的时间(以毫秒为单位)(1.11.4)。
- uFirstByteBuckets
- msecs
- 由
server_traffic_status_histogram_buckets指令设置的直方图的桶值。 - counters
- 每个桶值大于或等于接收第一字节数据的时间的累计值。
- weight
- 服务器的当前
weight设置。
- 服务器的当前
- maxFails
- 服务器的当前
max_fails设置。
- 服务器的当前
- failTimeout
- 服务器的当前
fail_timeout设置。
- 服务器的当前
- backup
- 服务器的当前
backup设置。
- 服务器的当前
- down
- 服务器的当前
down设置。
- 服务器的当前
控制使用的 Json
/{status_uri}/control?cmd=reset&...
/{status_uri}/control?cmd=delete&...
- processingReturn
- 结果为真或假。
- processingCommandString
- 请求的命令字符串。
- processingGroupString
- 请求的组字符串。
- processingZoneString
- 请求的区域字符串。
- processingCounts
- 实际处理的数量。
变量
在 stream 块中提供以下嵌入变量:
- $sts_connect_counter
- 从客户端接收到的请求总数。
- $sts_in_bytes
- 从客户端接收到的字节总数。
- $sts_out_bytes
- 发送给客户端的字节总数。
- $sts_1xx_counter
- 状态码为 1xx 的响应数量。
- $sts_2xx_counter
- 状态码为 2xx 的响应数量。
- $sts_3xx_counter
- 状态码为 3xx 的响应数量。
- $sts_4xx_counter
- 状态码为 4xx 的响应数量。
- $sts_5xx_counter
- 状态码为 5xx 的响应数量。
- $sts_session_time
- 请求处理时间的平均值。
限制
可以使用指令 server_traffic_status_limit_traffic 限制每个服务器的总流量。
还可以使用指令 server_traffic_status_limit_traffic_by_set_key 限制所有流量。
当超过限制时,服务器将返回 503(服务暂时不可用)错误作为请求的响应。
返回代码是可变的。
限制服务器流量
stream {
server_traffic_status_zone;
...
server {
listen 1981;
server_traffic_status_limit_traffic in:64G;
server_traffic_status_limit_traffic out:1024G;
...
}
}
- 将
1981/tcp上的进/出总流量限制为 64G 和 1024G。
限制过滤器流量
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
...
server {
listen 1981;
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr;
server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@US out:1024G;
server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@CN out:2048G;
...
}
}
- 将进入美国和中国的总流量限制为 1024G 和 2048G。
限制上游流量
stream {
server_traffic_status_zone;
...
upstream backend {
server 10.10.10.17:80;
server 10.10.10.18:80;
}
server {
listen 1981;
server_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.17:80 in:512G;
server_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.18:80 in:1024G;
proxy_pass backend;
...
}
}
- 将进入上游后端的总流量限制为 512G 和 1024G。
注意事项: 流量是累积传输或计数,而不是带宽。
用例
可以使用指令 server_traffic_status_filter_by_set_key 计算用户定义的个体统计信息。
使用 GeoIP 计算单个国家的流量
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
server_traffic_status_filter_by_set_key $geoip_country_code country::*;
...
server {
...
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;
}
}
- 计算所有服务器组的单个国家的流量。
- 计算每个服务器组的单个国家的流量。
基本上,国家旗帜图像内置于 HTML 中。
如果在 server_traffic_status_filter_by_set_key 指令的第二个参数中包含 country 字符串,则启用国家旗帜图像。
自定义
模块安装后进行自定义
-
您需要在 status.template.html 中将
{{uri}}字符串更改为您的状态 URI,如下所示:shell> vi share/status.template.htmlvar vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000; -
然后,自定义并将 status.template.html 复制到服务器根目录,如下所示:
shell> cp share/status.template.html /usr/share/nginx/html/status.html -
配置
nginx.confserver { server_name example.org; root /usr/share/nginx/html; # 将对 / 的请求重定向到 /status.html location = / { return 301 /status.html; } location = /status.html {} # 所有以 /status 开头的请求(除了 /status.html)都由状态处理程序处理 location /status { stream_server_traffic_status_display; stream_server_traffic_status_display_format json; } } -
访问您的 HTML。
http://example.org/status.html
模块安装前进行自定义
-
修改
share/status.template.html(不要更改{{uri}}字符串) -
重新创建
ngx_http_stream_server_traffic_status_module_html.h,如下所示:shell> cd util shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_stream_server_traffic_status_module_html.h -
通过添加以下内容将模块添加到构建配置中
--add-module=/path/to/nginx-module-sts --add-module=/path/to/nginx-module-stream-sts -
构建 nginx 二进制文件。
-
安装 nginx 二进制文件。
指令
stream_server_traffic_status
| - | - |
|---|---|
| 语法 | stream_server_traffic_status \<on|off> |
| 默认 | off |
| 上下文 | http, server, location |
描述: 启用或禁用模块的工作。
如果设置了 stream_server_traffic_status_zone 指令,则会自动启用。
stream_server_traffic_status_zone
| - | - |
|---|---|
| 语法 | stream_server_traffic_status_zone [shared:name] |
| 默认 | shared:stream_server_traffic_status |
| 上下文 | http |
描述: 设置由 server_traffic_status_zone 指令在流块中指定的共享内存区域的参数。
注意事项: name 必须与 server_traffic_status_zone 指定的名称相同。
stream_server_traffic_status_display
| - | - |
|---|---|
| 语法 | stream_server_traffic_status_display |
| 默认 | - |
| 上下文 | http, server, location |
描述: 启用或禁用模块显示处理程序。
stream_server_traffic_status_display_format
| - | - |
|---|---|
| 语法 | stream_server_traffic_status_display_format \<json|html|jsonp|prometheus> |
| 默认 | json |
| 上下文 | http, server, location |
描述: 设置显示处理程序的输出格式。
如果设置为 json,将响应一个 JSON 文档。
如果设置为 html,将响应内置的 HTML 实时仪表板。
如果设置为 jsonp,将响应一个 JSONP 回调函数(默认:ngx_http_stream_server_traffic_status_jsonp_callback)。
如果设置为 prometheus,将响应一个 prometheus 文档。
stream_server_traffic_status_display_jsonp
| - | - |
|---|---|
| 语法 | stream_server_traffic_status_display_jsonp callback |
| 默认 | ngx_http_stream_server_traffic_status_jsonp_callback |
| 上下文 | http, server, location |
描述: 设置 JSONP 的回调名称。
stream_server_traffic_status_average_method
| - | - |
|---|---|
| 语法 | stream_server_traffic_status_average_method \<AMM|WMA> [period] |
| 默认 | AMM 60s |
| 上下文 | http, server, location |
描述: 设置计算响应处理时间平均值的公式方法。
period 是用于平均计算的值的有效时间。(默认:60s)
如果将 period 设置为 0,则忽略有效时间。
在这种情况下,即使没有请求,经过一段时间后也会显示最后的平均值。
相应的值为 JSON 中的 sessionMsec、uSessionMsec、uConnectMsec、uFirstByteMsec。
server_traffic_status
| - | - |
|---|---|
| 语法 | server_traffic_status \<on|off> |
| 默认 | off |
| 上下文 | stream, server |
描述: 启用或禁用模块的工作。
如果设置了 server_traffic_status_zone 指令,则会自动启用。
server_traffic_status_zone
| - | - |
|---|---|
| 语法 | server_traffic_status_zone [shared:name:size] |
| 默认 | shared:stream_server_traffic_status:1m |
| 上下文 | stream |
描述: 设置将为各种键保留状态的共享内存区域的参数。
缓存在所有工作进程之间共享。
server_traffic_status_filter
| - | - |
|---|---|
| 语法 | server_traffic_status_filter \<on|off> |
| 默认 | on |
| 上下文 | stream, server |
描述: 启用或禁用过滤器功能。
server_traffic_status_filter_by_set_key
| - | - |
|---|---|
| 语法 | server_traffic_status_filter_by_set_key key [name] |
| 默认 | - |
| 上下文 | stream, server |
描述: 启用用户定义变量的键。
key 是用于计算流量的键字符串。
name 是用于计算流量的组字符串。
key 和 name 可以包含变量,例如 $host、$server_addr、$server_port。
如果指定,则 name 的组属于 streamFilterZones。
如果未指定第二个参数 name,则 key 的组属于 streamServerZones。
使用 geoip 模块的示例如下:
stream {
...
server {
listen 1981;
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;
...
}
}
...
"streamServerZones": {
...
},
"streamFilterZones": {
"country::example.org": {
"KR": {
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsec":...
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
},
},
"US": {
...
},
...
},
...
},
...
server_traffic_status_filter_check_duplicate
| - | - |
|---|---|
| 语法 | server_traffic_status_filter_check_duplicate \<on|off> |
| 默认 | on |
| 上下文 | stream, server |
描述: 启用或禁用 server_traffic_status_filter_by_set_key 的去重。
如果启用此选项,则在每个指令(流、服务器)中仅处理一个重复值(key + name)。
server_traffic_status_limit
| - | - |
|---|---|
| 语法 | server_traffic_status_limit \<on|off> |
| 默认 | on |
| 上下文 | stream, server |
描述: 启用或禁用限制功能。
server_traffic_status_limit_traffic
| - | - |
|---|---|
| 语法 | server_traffic_status_limit_traffic member:size [code] |
| 默认 | - |
| 上下文 | stream, server |
描述: 启用指定 member 的流量限制。
member 是用于限制流量的成员字符串。
size 是限制流量的大小(k/m/g)。
code 是对被拒绝请求的响应代码。(默认:503)
可用的 member 字符串如下:
* connect
* 从客户端接收到的客户端连接总数。
* in
* 从客户端接收到的字节总数。
* out
* 发送给客户端的字节总数。
* 1xx
* 状态码为 1xx 的响应数量。
* 2xx
* 状态码为 2xx 的响应数量。
* 3xx
* 状态码为 3xx 的响应数量。
* 4xx
* 状态码为 4xx 的响应数量。
* 5xx
* 状态码为 5xx 的响应数量。
server_traffic_status_limit_traffic_by_set_key
| - | - |
|---|---|
| 语法 | server_traffic_status_limit_traffic_by_set_key key member:size [code] |
| 默认 | - |
| 上下文 | stream, server |
描述: 启用指定 key 和 member 的流量限制。
key 是用于限制流量的键字符串。
member 是用于限制流量的成员字符串。
size 是限制流量的大小(k/m/g)。
code 是对被拒绝请求的响应代码。(默认:503)
key 语法如下:
* group@[subgroup@]name
可用的 group 字符串如下:
* NO
* 服务器组。
* UA
* 单独的上游组。
* UG
* 上游组。(使用 subgroup)
* FG
* 过滤器组。(使用 subgroup)
可用的 member 字符串如下:
* connect
* 从客户端接收到的请求总数。
* in
* 从客户端接收到的字节总数。
* out
* 发送给客户端的字节总数。
* 1xx
* 状态码为 1xx 的响应数量。
* 2xx
* 状态码为 2xx 的响应数量。
* 3xx
* 状态码为 3xx 的响应数量。
* 4xx
* 状态码为 4xx 的响应数量。
* 5xx
* 状态码为 5xx 的响应数量。
member 与 server_traffic_status_limit_traffic 指令相同。
server_traffic_status_limit_check_duplicate
| - | - |
|---|---|
| 语法 | server_traffic_status_limit_check_duplicate \<on|off> |
| 默认 | on |
| 上下文 | stream, server |
描述: 启用或禁用 server_traffic_status_limit_by_set_key 的去重。
如果启用此选项,则在每个指令(流、服务器)中仅处理一个重复值(member | key + member)。
server_traffic_status_average_method
| - | - |
|---|---|
| 语法 | server_traffic_status_average_method \<AMM|WMA> [period] |
| 默认 | AMM 60s |
| 上下文 | stream, server |
描述: 设置计算响应处理时间平均值的公式方法。
period 是用于平均计算的值的有效时间。(默认:60s)
如果将 period 设置为 0,则忽略有效时间。
在这种情况下,即使没有请求,经过一段时间后也会显示最后的平均值。
相应的值仅为 $sts_session_time 变量。
注意事项: $sts_session_time 变量是在最后请求时计算的值。
在使用变量时不会计算。
server_traffic_status_histogram_buckets
| - | - |
|---|---|
| 语法 | server_traffic_status_histogram_buckets second ... |
| 默认 | - |
| 上下文 | stream |
描述: 设置用于直方图的观察桶。
默认情况下,如果不设置此指令,则将不起作用。
second 可以用小数表示,最小值为 0.001(1ms)。
桶的最大大小为 32。如果这个值对您来说不够,请更改 NGX_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN 在 nginx-mdule-stream-sts/src/ngx_stream_server_traffic_status_node.h 和 NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN 在 nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h。
例如:
* server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10
* 观察桶为 [5ms 10ms 50ms 1s 5s 10s]。
* server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1
* 观察桶为 [5ms 10ms 50ms 1s]。
注意事项: 默认情况下,如果不设置此指令,直方图统计将不起作用。
另请参阅
GitHub
您可以在 nginx-module-sts 的 GitHub 仓库 中找到此模块的其他配置提示和文档。