Модуль системной защиты Nginx
В этом документе описан nginx-module-sysguard v0.1.0
выпущенный 23 февраля 2017 г.
Более ранние версии не тестировались.
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 ;
}
}
}
Этот модуль можно использовать для защиты вашего сервера в случае загрузки системы, слишком высокого использования памяти или слишком медленного ответа на запросы. Это портированная версия sysguard из tengine на чистый NGINX для поддержки тех же функций.
Caveats:
Обратите внимание, что для этого модуля требуется системный вызов sysinfo(2) или функция getloadavg(3) в glibc. Для получения информации о памяти также требуется файловая система /proc.
Предусмотрены следующие встроенные переменные:
$sysguard_load
равно 100, то нагрузка равна 0,1 (100/1000). (/мсек)$sysguard_rt
равно 100, время ответа составляет 0,1 секунды (100/1000). (/мсек)- | - |
---|---|
Синтаксис | системная защита <вкл|выкл> |
По умолчанию | выключенный |
Контекст | http, сервер, местоположение |
Description:
Включает или отключает работу модуля.
- | - |
---|---|
Синтаксис | sysguard_load load= число [действие= /url ] |
По умолчанию | - |
Контекст | http, сервер, местоположение |
Description:
Укажите порог нагрузки. Когда загрузка системы превысит этот порог, все последующие запросы будут перенаправляться на URL-адрес, указанный параметром action. Он вернет 503, если не определен URL-адрес действия. Эта директива также поддерживает использование ncpuratio вместо фиксированного порога, «ncpu» означает количество ядер процессора, вы можете использовать эту директиву следующим образом: load=ncpu1.5
- | - |
---|---|
Синтаксис | sysguard_mem swapratio= соотношение % свободных= размер [действие= /url ] |
По умолчанию | - |
Контекст | http, сервер, местоположение |
Description:
Укажите используемую память подкачки или порог свободной памяти. Когда коэффициент использования памяти подкачки превышает этот порог или свободная память меньше размера, все последующие запросы будут перенаправлены на URL-адрес, указанный параметром action. Он вернет 503, если URL-адрес «действия» отсутствует. Sysguard использует эту стратегию для расчета свободной памяти: «memfree = свободно + буферизовано + кэшировано»
- | - |
---|---|
Синтаксис | sysguard_rt rt= второй период= время [метод= |
По умолчанию | - |
Контекст | http, сервер, местоположение |
Description:
Укажите порог времени ответа. Параметр rt используется для установки порога среднего времени ответа в секундах. Параметр period используется для указания периода цикла статистики. Если среднее время ответа системы превышает порог, указанный пользователем, входящий запрос будет перенаправлен на указанный URL-адрес, который определяется параметром «действие». Если «действие» не указано, на запрос будет дан ответ с ошибкой 503. method
представляет собой формулу, которая рассчитывает среднее время обработки ответа. number
в методе — это количество выборок для расчета среднего значения. Метод по умолчанию установлен как method=AMM:period
.
- | - |
---|---|
Синтаксис | sysguard_mode <и|или> |
По умолчанию | или |
Контекст | http, сервер, местоположение |
Description:
Если существует более одного типа мониторов, эта директива используется для указания отношений между всеми мониторами, а именно: «и» для всех совпадений и «или» для любого совпадения.
- | - |
---|---|
Синтаксис | sysguard_interval время |
По умолчанию | 1 с |
Контекст | http, сервер, местоположение |
Description:
Укажите интервал времени для обновления информации о вашей системе. Значение по умолчанию — одна секунда, что означает, что sysguard обновляет состояние сервера раз в секунду.
- | - |
---|---|
Синтаксис | sysguard_log_level <информация|уведомление|предупреждение|ошибка> |
По умолчанию | ошибка |
Контекст | http, сервер, местоположение |
Description:
Укажите уровень журнала sysguard.