Laravel の throttle を引き上げたのに 429 がでる
https://www.google.com/search?q=laravel+429+throttle
Laravel はデフォルトで同一IPからの1分あたりの接続数を制限する機能があって
それをこえると 429 too many attempts を返すようなのです
どの記事も対策として throttle をひきあげろとかいていて
app/Http/Kernel.php
'api' => [
'throttle:4000,1',
'bindings',
],
のところを 60 だったのを 600 => 1000 => 4000 と段階的にあげてデプロイしたんですが
依然として 429 が出続けます
これまでは正確に数えたわけではないのですが 1000 までは認識されてる(429の頻度が減った)
感じがする(少なくとも 60 => 600 の時点では確実に減った)のですが
分間 4000 件のアクセスは確実にしていないのに依然として 429 がでてくるので
設定値に上限があったりするのでしょうか?
sudo cat /var/log/nginx/access.log | grep '" 429' -B 4000 | grep xxx.xxx.xxx.xxx
で 429 を出してから同一IPのログを調べてみたんですが
ログの行数 タイムスタンプ ステータス
0 [21/Aug/2019:00:11:46 +0000] 200
325 [21/Aug/2019:00:12:04 +0000] 200
326 [21/Aug/2019:00:12:04 +0000] 429
599 [21/Aug/2019:00:12:46 +0000] 429
このようになっていて 12:46 が最後の 429 だったのでこのタイミングでリセットされたんだろうということで
1 分前 11:46 からのカウントをはじめて 325 件のところで 429 が出始めて
1 分たった 600件のところで 429 がとまった(429 が 274 件でた)という感じです
ちなみにこのAPIサーバーは内向きで
外向きのAPIサーバー6台から(+ヘルスチェックがごく小数回)のみ接続をうけていて
429が出るときは常に同じIPに対してのみなので6台の合計というわけでもなさそうです
サーバー内のソースもきちんと 4000 になって反映されてるし
nginx も何度も再起動してマスタープロセス起動時間もデプロイ後の時間になってます
4000 には程遠い件数で 429 が出始めるのはなぜなんでしょうか