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的日誌等級。