0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nginxの流量制限設定値の具体例

Posted at

はじめに

Nginxの流量制限の適切な設定値についてのメモです。

流量制限値が不適切だとどうなるか

値が厳しすぎると正常なリクエストが流量制限にひっかかります。CSSやスクリプト等のコンテンツが応答されなくなり、ブラウザの挙動がおかしくなります。リロードすると直ったりするので「キャッシュの問題かも」などと原因を見失って時間を浪費します。
私の場合は、タイミングによって画像が表示されなかったり、スクリプトが動作しなかったりしました。

設定値について

設定値を決める前提条件

1秒あたりのページリクエスト数と1ページあたりのリクエスト数を元に値を決めます。今回は以下のように見積もりました。

  • ページリクエストは最大で1秒に2回
  • 1ページあたりのリクエスト数はCSS、画像、JavaScript等含めると最大で50

設定例

私の環境では送信元のIPアドレス単位で制限したいので、以下のような設定にしています。
/etc/nginx/nginx.confの抜粋

limit_req_zone $binary_remote_addr zone=myzone:1m rate=100r/s;

server {
  location /myapp {
    limit_req zone=myzone burst=50 nodelay;
  }
}

ポイントは3つのパラメータです。

共有メモリサイズ

zone=myapp:1mで指定します。
キー情報を格納するメモリです。1MBで8000保持できます。この8000は同時接続クライアント数になります。

レート

rate=100r/sで指定します。
1秒あたりのリクエスト数です。今回はページリクエストが2回/秒、1ページのリクエストが50なので、100リクエスト/秒となります。

バースト

burst=50で指定します。
レート制限超過を救済するバッファ数です。レート制限で指定した「100リクエスト/秒」は実際には「1リクエスト/10ミリ秒」という制限になります。10ミリ秒以内に複数リクエストが到着すると503エラーが返ります。10ミリ秒以内に1ページの全リクエストが到着しても良いように50にします。

例えば、1ページ分の50個のリクエストが同時に来たとすると、1個が処理されて49個がバースト領域に保持されます。この49個は10ミリ秒毎に1個ずつ処理されていき、500ミリ秒で50個のリクエスト処理が完了します。

参考:ログについて

特に設定しない限り流量制限による503エラーはNginxのログに出力されません。503エラーが発生したのにログに出力されていない場合は、流量制限を疑いましょう。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?