Я оцениваю nginx как ограничитель скорости для многопользовательской системы REST API. Мне нужно ограничить вызовы API идентификатором-арендатором. Например, я хочу разрешить 100 r/s для арендатора1 и только 50 r/s для арендатора2.nginx как ограничитель скорости на основе http body
Это может быть легко достигнуто при наличии разных URL-адресов, таких как: «me.com/tenant1/api» и «me.com/tenant2/api» (с директивой о местоположении).
Но в моем случае URL-адреса одинаковы для всех арендаторов «me.com/api» (я не могу это изменить). Чтобы найти идентификатор арендатора, мне нужно извлечь атрибут JSON из тела запроса, а затем проверить DB для реального идентификатора арендатора.
Можно ли ограничить_рек с моими требованиями?
Благодарим за помощь!
Если вы можете поместить этот идентификатор в качестве HTTP-заголовка, вы должны сделать что-то вроде 'limit_req_zone $ http_tenant_id ...'. В противном случае вы можете использовать [карту] (http://nginx.org/en/docs/http/ngx_http_map_module.html#map), чтобы извлечь это значение из $ response_body. –
спасибо @FaisalMemon. к сожалению, я не могу добавить http-заголовок. единственный способ найти идентификатор арендатора - это декодировать тело Base64 JSON, извлечь некоторую переменную и выполнить поиск в БД (или кеше). – Yarix
Чтобы сделать что-то сложное, вам, скорее всего, придется использовать Lua: https://github.com/openresty/lua-nginx-module#readme –