Bloquer de manière programmatique une URL pour évaluer la limite, débloquer ou expirer le bloc

Mes exigences sont de pouvoir évaluer la limite ou bloquer temporairement toutes les requêtes à notre server pour une URL particulière si le client envoie plus de x requests par heure.

Il y a environ 250 Ko qui pourraient être bloqués.

Les clients ont des URL uniques qu'ils font un post http, donc quelque chose comme:

customer1.example.com/post/location/36A107F4-DD68-47F2-A093-753F7A427CF6/

Lorsque customer1 est le nom du client , et 36A107F4-DD68-47F2-A093-753F7A427CF6 est leur guide d'location unique.

Je souhaite que mon application puisse faire une sorte d'appel d'API pour bloquer une url donnée, puis utiliser un appel d'API pour débloquer ou laisser le bloc expirer après x minutes.

Est-ce possible avec n'importe quel service open source comme haproxy ou nginx?

Voici quelques idées … ce ne sont pas spécifiques à nginx ou HAProxy, mais peut-être que vous pourriez utiliser les mêmes idées.

Cet article explique comment ils utilisent le vernis pour implémenter une limitation de débit par URL pour une application. L'application communique avec Vernis à l'aide d'un en-tête HTTP personnalisé, plutôt que d'un appel API, mais l'idée est similaire.

À l'aide d'Apache, vous pouvez faire quelque chose d'similaire à l'aide d'un programme RewriteMap … searchz des requêtes dans une database, et pour celles qui sont actuellement limitées aux tarifs, réécrivez-les à une page d'erreur, sinon transmettez-les sans modification. L'activation / désactivation de la limitation de taux pour une URL particulière serait une simple modification d'une ligne dans la database.