nginxでメンテナンスモードっぽい事をする

今まで自分のサーバでまともなメンテナンスをした事がなかったのですが、PostgreSQLをRPMの8.4から自前ビルドの9.2にアップデートしたいということで、そうすると結構な時間サービスを止めるので、その間メンテナンスページを表示したいと言う事です。

ちょっとググると良い感じで下記2ページが見つかりました。

上記参考ページを元にしたnginxの設定が以下です。/var/tmp/.maintenance_modeファイルがあるときにメンテナンスページを表示します。自分のIPとメンテナンスURLを除外したりと参考ページのほぼ丸パクリです。

server {
    ...
	
    set $maintenance false;
	# ファイルがあるときにメンテナンスモード
    if (-e /var/tmp/.maintenance_mode) {
        set $maintenance true;
    }
    if ($uri ~ "^/maintenance/") {
        set $maintenance false;
    }
	
    if ($remote_addr = 自分のIPアドレス) {
        set $maintenance false;
    }
    error_page 503 /maintenance/maintenance.html;
    location /maintenance/ {
        root /var/www/html;
    }
    if ($maintenance = true) {
        return 503;
    }

    ...
}

これでnginxが応答可能な場合のメンテナンスは問題なさそうです。/var/tmp/.maintenance_modeをtouchしたり消したりでモード変更出来るので楽チンですね。

サーバの再起動とかなると、リバースプロキシとアプリケーションサーバでホスト分けとかないとダメですけど、今のところはこれで満足です。

Leave a Reply

Your email address will not be published. Required fields are marked *