есть (будет) некий сервис, который отдает пользователям очень
мелкие ответы по HTTP. Буквально 20-30 байт на запрос.
Для демо-версии хочется ограничить rate с IP или даже с сабнета.
Естественно, не в килобайтах в секунду (это же ограничение в рамках
одного запроса?) а в запросах в единицу времени.
Куда копать ?
Банальное решение сделать sleep() в начале ответа очень не нравится.
Делается модуль, который вешается на фазу POST_READ.
Делает примерно следующее:
ngx_http_delay_handler(ngx_http_request_t *r)
{
if (r->connection->write->delayed) {
r->connection->write->delayed = 0;
return NGX_OK;
}
ngx_add_timer(r->connection->write, 1000); /* 1s */
r->connection->write->delayed = 1;
return NGX_AGAIN;
}
Вызвать ngx_handle_read_event() и ngx_handle_write_event(), скорее всего,
не нужно.
Игорь Сысоев
http://sysoev.ru