Nginxでお手軽にメンテナンス画面を表示する方法
※本ページはプロモーションが含まれています

PHPやMySQLのアップデート時にNginxでメンテナンス画面を簡単に表示させる方法。
「Nginxでrestart, reloadをすることなくメンテナンス画面に切り替える – Qiita」を参考に、503エラーを返すようにしました。
メンテナンス画面の作成
/var/www/maintenance/maintenance.html
上記のようにメンテナンス画面用のHTMLを作成する。
「maintenance」ディレクトリがない場合は
$ sudo mkdir /var/www/maintenance
maintenance.htmlを作成する。
$ sudo vi /var/www/maintenance/maintenance.html
「maintenance.html」内のHTMLをこんな感じで作成。titleと時間を自分用に変更する。
<!DOCTYPE html>
<html>
<head>
<title>メンテナンス中 | サイト名</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
body { text-align: center; padding: 150px; }
h1 { font-size: 50px; }
body { font: 20px color: #333; }
article { display: block; text-align: left; width: 650px; margin: 0 auto; }
a { color: #dc8100; text-decoration: none; }
a:hover { color: #333; text-decoration: none; }
</style>
</head>
<body>
<article>
<h1>メンテナンス中</h1>
<p>只今メンテナンス中です。16時30分には終了します。</p>
</article>
</body>
</html>
Nginxの設定
「default.conf」を編集。
$ sudo vi /etc/nginx/conf.d/default.conf
既存の「server」内に追加。
server {
…
set $maintenance false;
if (-e /var/tmp/do_maintenance) {
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;
}
if ($maintenance = true) {
return 503;
}
…
}
「/var/tmp/do_maintenance」ファイルがある場合は503エラーを返し、「/var/www/maintenance/maintenance.html」を表示させている。
「自分のIPアドレス」にIPアドレスを入れると、そのIPからのアクセスはメンテナンス画面でなく、通常通りに表示させることができる。
サーバーを再起動。
$ sudo service nginx restart
これで準備完了。
メンテナンス画面の出し方、戻し方
「/var/tmp/do_maintenance」を作成する。
$ sudo touch /var/tmp/do_maintenance
これでメンテナンス画面に変わる。
メンテナンス画面を終了させるには「/var/tmp/do_maintenance」を削除する。
$ sudo rm /var/tmp/do_maintenance
以上のファイルの作成、削除だけでメンテナンス画面の出し戻しができるようになった。
