У меня есть форма массового поиска на серверах apache за nginx. Я хотел бы защитить это место так, чтобы второй запрос за 10-минутный период получал 301 на странице «Хотите ли вы использовать наш API» с чем-то вроде:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location = /search/bulk {
limit_req zone=one burst=2;
... SOME CONFIG HERE...
}
}
}
Как мне 301 конечный клиент, когда он достигнет моего limit_req, вместо того, чтобы показывать страницу с ошибкой ngnix? Кроме того, во-вторых, я не хочу ограничивать трафик для всего предложения http. Могу ли я установить limit_req_zone без тарифа, но иметь их в строфах моего местоположения?
Спасибо,
М.
По умолчанию, nginx
вернет 503 service temporarily unavailable
код ошибки.
В limit_req_status
существует директива для изменения кода ошибки в случае, если они попадают в limit_req
:
location = /search/bulk {
limit_req zone=one burst=2;
limit_req_status 404;
}
Проблема в том, что эта директива допускает только диапазон от 400 до 599, поэтому вы не можете указать 301
:
[emerg] 3130#0: value must be between 400 and 599 in /etc/nginx/nginx.conf:72
Итак, если ваша основная проблема заключается в отображении настраиваемого сообщения об ошибке вместо стандартного 503
один, вы можете поступить так:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location = /search/bulk {
limit_req zone=one burst=2;
error_page 503 /503.html;
}
location /503.html {
internal;
}
}
}
Тогда ваш обычай 503.html
файл :
<html><body>Would you like to use our API ?</body></html>
В rate
аргумент является обязательным. Вы должны указать ставку для limit_req_zone