App\Providers\RouteServiceProviderに移動して、boot
メソッド内でRateLimiter
の設定を変更
Laravelを使ったWebアプリケーションを開発する際、複数のタブやウィンドウでページを高速に開くと、429 Too Many Requests
というエラーに遭遇することがあります。この背景には、Laravelのデフォルトのレートリミットが関与しています。
初期設定では、同一IPアドレスからのAPIの呼び出しは1分間に60回までという制限があります。これはDOS攻撃などからサービスを保護するための対策として設定されていますが、必要に応じてこの制限は変更可能です。
レートリミットの変更方法
LaravelではApp\Providers\RouteServiceProvider
の中にあるboot
メソッドを通して、この制限を簡単にカスタマイズできます。
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
public function boot()
{
// 既存のコード
RateLimiter::for('api', function ($request) {
return Limit::perMinute(100); // 1分間に100回に変更
});
}
変更後、特に追加でコマンドを実行する必要はありません。
問題の再現
例えば、1ページにて4つのAPIを呼び出しているようなシチュエーションを考えます。このページを複数のタブで一気に開くと、15タブ目以降でAPIの呼び出し制限を超え、429 Too Many Requests
エラーが発生します。私の場合、業務システムにおいて複数の顧客ページを一括で開く処理を行った際にこの問題に遭遇しました。