サービスの運営で Redash を使っているんだけど、ブラウザーでログインページにアクセスすると 429 Too Many Requests
が表示されるときにやったことのメモ。
ログインページにアクセスすると 429 Too Many Requests
ブラウザーで Redash のログインページにアクセスすると 429 Too Many Requests
の表示になるようだった。
50 per 1 hour
とも表示しているので API のレートリミットにひっかかってるとかっぽい。
一応 curl でアクセスしてみるけどやっぱり 429
が返ってきているようだった。
$ curl --head http://localhost/login HTTP/1.1 429 TOO MANY REQUESTS Server: nginx/1.9.10 Date: Fri, 01 May 2020 17:02:34 GMT Content-Type: text/html Content-Length: 141 Connection: keep-alive
やったこと
見てみた
Redash の discuss にずばりな 429 Too Many Requests ってのがあって、そこを見てみると authentication.py がログインページのアクセス制限をしているっぽい。
@routes.route(org_scoped_rule("/login"), methods=["GET", "POST"]) @limiter.limit(settings.THROTTLE_LOGIN_PATTERN) def login(org_slug=None):
settings.THROTTLE_LOGIN_PATTERN
は init.py が REDASH_THROTTLE_LOGIN_PATTERN
環境変数の値を突っ込んでるので REDASH_THROTTLE_LOGIN_PATTERN
環境変数の値をいじればログインページへのアクセス制限を調整できそう。
THROTTLE_LOGIN_PATTERN = os.environ.get("REDASH_THROTTLE_LOGIN_PATTERN", "50/hour")
実際にやったこと
THROTTLE_LOGIN_PATTERN 環境変数の設定
ログインページのアクセス数が制限を超過しているのが原因なのだけど、ログインページのアクセス数を減らすことは難しそうだったので雑に制限を緩めることにした。
redash.env
ファイルに REDASH_THROTTLE_LOGIN_PATTERN=1000/hour
を追加して Redash を再起動したらログインページにアクセスするとちゃんとログインページが表示して、しつこくリロードしても 429 Too Many Requests
は出なくなった。
アクセス情報を保存している Redis のキーを消す
Redash が運用中で再起動ができないとかって状況のときもあると思うけど、そんなときは Redash がアクセス情報を保存している Redis のキーを消しちゃえばログインページにアクセスできるようになる。 急場しのぎにすぎないけど覚えておいて損はなさそう。
$ redis-cli keys *redash.login* 1) "LIMITER/xxx.xxx.xxx.xxx/redash.login/50/1/hour" $ redis-cli del "LIMITER/xxx.xxx.xxx.xxx/redash.login/50/1/hour" (integer) 1