Если вы хотите, чтобы обидящий пользователь заставил вас думать, что он все еще остается незамеченным вами, вы можете использовать модуль ограничения запросов nginx ( http://wiki.nginx.org/HttpLimitReqModule ).
Сначала определите зону ограничения запроса:
http {
limit_req_zone $binary_remote_addr zone=spammers:1m rate=30r/m;
}
Эта зона будет использовать IP-адрес нарушителя, чтобы идентифицировать и ограничивать запросы до 30 в минуту (1/2 секунды). Обратите внимание, что объем памяти зоны установлен в 1 МБ, что означает, что он может обрабатывать 1 МБ / 64 байта на корзину запросов = 16384 адресов спамеров (что, возможно, является избыточным для нашего случая). Отрегулируйте соответственно, если необходимо.
Далее мы определяем директиву, которая фактически направит нарушителя через ограничитель, используя (зло, к сожалению), если case:
location / {
if ($remote_addr = 1.2.3.4) {
limit_req zone=spammer burst=5;
}
}
Вы можете посмотреть плоды своего труда в журнале доступа сервера.
Обратите внимание, что этот хак плохо масштабируется, так как вам придется обновлять файл конфигурации каждый раз, когда нарушитель меняет IP (не говоря уже о включении большего количества IP-адресов, что означает больше случаев), но это работает.