Nginx 系统保护模块
本文档描述了 2017 年 2 月 23 日发布的 nginx-module-sysguard v0.1.0
。
早期版本未经过测试。
shell> git clone git://github.com/vozlt/nginx-module-sysguard.git
--add-module=/path/to/nginx-module-sysguard
构建 nginx 二进制文件。
安装 nginx 二进制文件。
http {
...
server {
...
sysguard on;
sysguard_mode or;
sysguard_load load=10.5 action=/loadlimit;
sysguard_mem swapratio=20% action=/swaplimit;
sysguard_mem free=100M action=/freelimit;
sysguard_rt rt=0.01 period=5s method=AMM:10 action=/rtlimit;
location /loadlimit {
return 503 ;
}
location /swaplimit {
return 503 ;
}
location /freelimit {
return 503 ;
}
location /rtlimit {
return 503 ;
}
}
...
server {
...
location /api {
sysguard on;
sysguard_mode or;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /images {
sysguard on;
sysguard_mode and;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /limit {
return 503 ;
}
}
}
该模块可用于保护您的服务器,以防系统负载、内存使用过高或请求响应过慢。这是 tengine 中 sysguard 到纯 NGINX 的移植版本,以支持相同的功能。
Caveats:
请注意,此模块需要 sysinfo(2) 系统调用,或 glibc 中的 getloadavg(3) 函数。它还需要 /proc 文件系统来获取内存信息。
提供了以下嵌入变量:
$sysguard_load
的值为 100,则负载为 0.1(100/1000)。 (/毫秒)$sysguard_rt
的值为 100,则响应时间为 0.1 秒(100/1000)。 (/毫秒)- | - |
---|---|
句法 | 系统保护<开|关> |
默认 | 离开 |
语境 | http、服务器、位置 |
Description:
启用或禁用模块工作。
- | - |
---|---|
句法 | sysguard_load负载 =数字[操作 = /url ] |
默认 | - |
语境 | http、服务器、位置 |
Description:
指定负载阈值。当系统负载超过此阈值时,所有后续请求将被重定向到“action”参数指定的 URL。如果没有定义“action”URL,它将返回 503。该指令还支持使用 ncpuratio 来代替固定阈值,'ncpu' 表示 cpu 核心数,您可以像这样使用该指令:load=ncpu1.5
- | - |
---|---|
句法 | sysguard_mem swapratio=比率% 空闲=大小[action= /url ] |
默认 | - |
语境 | http、服务器、位置 |
Description:
指定已用交换内存或可用内存阈值。当交换内存使用率超过此阈值或可用内存小于该大小时,所有后续请求将被重定向到“action”参数指定的 URL。如果没有“action”URL,它将返回 503。 Sysguard 使用此策略来计算可用内存:“memfree = free + buffered + cached”
- | - |
---|---|
句法 | sysguard_rt rt=第二个周期=时间[方法= |
默认 | - |
语境 | http、服务器、位置 |
Description:
指定响应时间阈值。参数rt用于设置平均响应时间的阈值,单位为秒。参数period用于指定统计周期的周期。如果系统的平均响应时间超过用户指定的阈值,传入的请求将被重定向到参数“action”定义的指定url。如果没有提供“action”,则请求将直接响应 503 错误。该method
是计算响应处理时间平均值的公式。 method中的number
是计算平均值的样本数。默认方法设置为method=AMM:period
。
- | - |
---|---|
句法 | sysguard_mode <和|或> |
默认 | 或者 |
语境 | http、服务器、位置 |
Description:
如果有不止一种类型的监视器,则该伪指令用于指定所有监视器之间的关系:“and”表示所有匹配,“or”表示任何匹配。
- | - |
---|---|
句法 | sysguard_interval时间 |
默认 | 1秒 |
语境 | http、服务器、位置 |
Description:
指定更新系统信息的时间间隔。默认值为一秒,这意味着 sysguard 每秒更新一次服务器状态。
- | - |
---|---|
句法 | sysguard_log_level <信息|通知|警告|错误> |
默认 | 错误 |
语境 | http、服务器、位置 |
Description:
指定sysguard的日志级别。