Назад | Перейти на главную страницу

nginx 301'ing limit_req скорость ограниченных запросов вместо страницы ошибки

У меня есть форма массового поиска на серверах 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