2013年7月6日土曜日

nginxでメンテナンス画面を表示する

どうも、タローポチです


自分、ウェブプログラマーしているんですが、今度、サイトをメンテナンスするためサーバーを止めないといけないのですが、そのためのメンテナンス画面に切り替えるメモを書きます


使用しているウェブサーバーはnginxです


仕様は静的html(メンテナンス画面)maintenance.htmlをnow_maintenance.htmlにコピーすると画面がメンテナンスに自動的に切り替わる
特定のIPアドレスからは通常のサービス画面が表示される
now_maintenance.htmlを削除すると通常のサービス画面が表示される


上記が仕様です


メインのnginx.confファイルは書き換えない
nginx.conf内にインクルードされているファイルを書き換える


/etc/nginx/conf.d/app.inc nginx.confにインクルードされているアプリコンフ
/etc/nginx/conf.d/maintenance.inc を作成


# /etc/nginx/conf.d/app.inc

# 常時maintenance.inc読み込み
include maintenance.inc

# URLに maintenanceが含まれていたらトップではなくmaintenanceディレクトリ内を表示
location ~ ^ /maintenance/(*).html$ {
    alias /home/pochi/app/maintenance/$1.html
}


# /etc/nginx/conf.d/maintenance.inc

# メンテナンス画面通常非表示
set $maintenance  "false";

# maintenanceディレクトリ内にnow_maintenance.htmlがあるときはメンテナンス画面を表示
if (-f /home/pochi/app/maintenance/now_maintenance.html) {
    set $maintenance true;
}

# 画像、CSSは表示
if ($request_uri ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO)){
    set $maintenance  "false";
}

# 自分自身はサービスアクセス可能
if ($remote_addr ~ ^192\.168\.0\.1 ) {set $maintenance "false";}

# メンテナンス画面へリダイレクト
if ($maintenance = true) {
    rewrite ^ /maintenance/now_maintenance.html;
}


こんな感じですw

0 件のコメント:

コメントを投稿