Количество доступных запросов на страницу в минуту

Указать, сколько запросов может быть на странице, можно через метод middleware('throttle').

// Разрешено 100 запросов в минуту
Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:100,1');

На примере выше указано, что на странице «pages/about» может быть не больше 100 запросов в минуту. Если запросов будет больше, то откроется страница с ошибкой «429: Too Many Requests».

Laravel. Error 429: Too Many Requests

Если это условие надо указать нескольким страницам, то их можно объединить через метод Route::middleware('throttle').

Route::middleware('throttle:100,1')->group(function() {
    Route::get('pages/create', [PagesController::class, 'about']);
    Route::get('pages/update', [PagesController::class, 'contacts']);
});

Задать имя

В файле «app/Providers/AppServiceProvider.php» можно задать имя для ограничения запросов.

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;

public function boot(): void
{
    RateLimiter::for('custom', function (Request $request) {
        return Limit::perMinute(100);
    });
}

И в роутах можно задать примерно следующий код:

Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:custom');

Количество доступных запросов в минуту по IP

По умолчанию, количество доступных запросов на страницу задаётся всем пользователям.

Можно сделать ограничение по IP пользователей (у каждого пользователя свой IP-адрес). Делается это через код ниже:

public function boot(): void
{
    RateLimiter::for('ip', function (Request $request) {
        return Limit::perMinute(100)->by($request->ip());
    });
}

Осталось только задать ограничение для нужной страницы:

Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:ip');

Количество доступных запросов в минуту по пользователю

Если страница доступна только авторизованным, то ограничения на количество запросов можно задать текущему пользователю через код ниже:

public function boot(): void
{
    RateLimiter::for('user', function (Request $request) {
        return Limit::perMinute(100)->by($request->user()->id);
    });
}

Осталось только задать ограничение для нужной страницы:

Route::get('pages/update', [PagesController::class, 'update'])->middleware('throttle:user');