📌

Nginxで時間帯別の速度制限を施す

2018/04/06に公開

概要

  • トラフィックとか制限したい
  • でも常に不便なのは申し訳ない
  • Nginxをビルドし直すのはめんどいので標準でやりたい

アナログな手段としてファイルの有無で適用するlimit_rateを変更する。

Nginx側の下準備

nginx.confの使いたいlocation内に記述。

 location / {
    # フラグ用変数を用意
    set $bandwidth_limit false;

    # ファイルの有無をチェック
    if ( -e /var/tmp/nginx_timechk ) {
        set $bandwidth_limit true;
    }

    # ファイルがある場合は10MByte/Secに
    if ( $bandwidth_limit = true ) {
        limit_rate 10M;
    }

    # ファイルがない場合は50MByte/Secに
    if ( $bandwidth_limit = false ) {
        limit_rate 50M;
    }
 }

cronで時間帯制御

e.g. 9時〜18時(業務時間帯)は低速運用。

* 9 * * * touch /var/tmp/nginx_timechk
* 18 * * * rm -f /var/tmp/nginx_timechk
# お好みで >/dev/null 2>&1 とか
  • よくあるNginx無停止でのメンテナンス画面表示と同じ手法なので応用が利く
  • 昔はcbq.initとか使って制御していたけれどCentOS7で手軽に動かなかったので

Discussion