Мои требования заключаются в том, чтобы иметь возможность ограничивать скорость или временно жестко блокировать любые запросы к нашему серверу для определенного URL-адреса, если клиент отправляет более x запросов в час.
Существует около 250 тысяч URL-адресов, которые потенциально могут быть заблокированы.
У клиентов есть уникальные URL-адреса, по которым они тоже публикуют http-сообщение, например:
customer1.example.com/post/location/36A107F4-DD68-47F2-A093-753F7A427CF6/
Где customer1 - это имя покупателя, а 36A107F4-DD68-47F2-A093-753F7A427CF6 - их уникальный гид по местоположению.
Я хочу, чтобы мое приложение могло выполнить какой-то вызов API для блокировки заданного URL-адреса, а затем либо использовать вызов API, чтобы разблокировать, либо срок действия блока истекает через x минут.
Возможно ли это с любым сервисом с открытым исходным кодом, таким как haproxy или nginx?
Вот несколько идей ... они не относятся к nginx или HAProxy, но, возможно, вы могли бы использовать те же идеи.
Эта статья обсуждает, как они используют Varnish для реализации ограничения скорости URL-адреса для приложения. Приложение взаимодействует с Varnish, используя собственный HTTP-заголовок, а не вызов API, но идея аналогична.
Используя Apache, вы могли бы сделать нечто подобное, используя программный RewriteMap... искать запросы в базе данных, а для тех, которые в настоящее время ограничены по скорости, переписать их на страницу с ошибкой, в противном случае передать их без изменений. Включение / выключение ограничения скорости для определенного URL-адреса будет простым изменением одной строки в базе данных.