LoginSignup
65

More than 5 years have passed since last update.

Nginxでrestart, reloadをすることなくメンテナンス画面に切り替える

Last updated at Posted at 2012-10-13

Nginxではifを用いて特定のファイルが存在するか調べることができるのでこれを利用する

以下のような設定にすることで/var/tmp/do_maintenanceがある場合はメンテナンス、ない場合は通常の状態を表示できる。

# setディレクティブでメンテナンスon/off用フラグ変数を設定
set $maintenance false;

# /var/tmp/do_maintenanceがある場合はメンテモード
if (-e /var/tmp/do_maintenance ) {
    set $maintenance true;
}

# メンテ時でもサイトを確認するためのワークアラウンド
# 特定のアドレスからの場合は通常の状態の表示を許可
if ($remote_addr = XXX.XXX.XXX.XXX) {
    set $maintenance false;
}

# メンテナンスモードの場合は/maintenance.htmlにrewirteしつつ、rootディレクトリを書き換える
# この場合だと/var/www/maintenance/maintenance.htmlがメンテナンス画面用ファイルになる
# このような周りくどい設定にしているのは通常時にmaintenance.htmlを直アクセスで見れないようにするため。
if ($maintenance = true) {
    rewrite ^ /maintenance.html redirect;
}

# メンテナンスファイルの置き場を指定
location /maintenance.html {
    root /var/www/maintenance;
    # キャッシュさせないようにexpiresを0にしておく
    expires 0;
}

# 通常時のrootディレクトリ
location /
    root /var/www/root;
}

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
65