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
以上のファイルの作成、削除だけでメンテナンス画面の出し戻しができるようになった。