@Usertouch

Как решить проблему с Too many requests при server-side rendering?

Есть два сервака, один с Laravel используется как API, второй с Nuxt.js с пререндерингом на серваке SSR. Проблема в том, что данные по api запрашиваются с сервера напрямую, а не от клиента (браузера пользователя). Так происходит потому что у нас SSR mode на Nuxt.js. В итоге когда разные пользователи заходят на frontend сервер мы получаем много запросов на backend сервер как будто от одного клиента, а именно с нашего фронтэнд сервера. От этого backend сервер отрубает эти запросы на ошибку 424 Too many requests.

Вопрос: что предпринять, чтобы не отрубались все запросы? SSR режим нам нужен для SEO, чтобы яндекс видел страницы нашего Сайта.
  • Вопрос задан
  • 1467 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Настроить форвард реального ip между проксирующими серверами. Пример.

Другой вариант: сделать свой middleware, повторяющий стандартный механизм ограничения количества запросов, но добавить в него исключение для ip фронтенда.

Мне форвардинг кажется самым правильным решением, но он не всегда возможен - иногда локальная сеть настроена криво или имеет сложную структуру и тогда передать внешний ip не получается.
Есть ещё один нюанс: поисковый бот может всё равно упереться в эти лимиты, даже если вы настроите корректный форвардинг ip - он просто будет делать запросов больше, чем разрешено.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Hakhagmon
Настройка посредника throttle
Cделаем ограничение на 5 попыток в минуту.

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5'], function () {
  Route::get('people', function () {
    return Person::all();
  });
});


если кто-то достигнет предела, то ему надо будет ждать 10 минут.

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5,10'], function () {
    Route::get('people', function () {
        return Person::all();
    });
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы