nginxでメンテナンスページを表示する

nginxで、特定のIPアドレスからのアクセスでは通常の画面を表示し、それ以外のIPアドレスではメンテナンス画面を表示する設定を調べてみました。いくつか方法があり、nginx設定ファイルの再編集、nginxリロードなしでできる方法を試しましたが、if分岐が動作しなかったため断念しました。以下の方法ですんなりと動きました。


準備1.メンテナンス用htmlファイルを用意する

サーバ上のドキュメントルートに、メンテナンス用のhtmlファイルをアップロードします。 

例:

  1.  /var/www/html/maintenance.html


準備2.メンテナンス用設定ファイルを作成する

コマンド例:

  1. $ sudo vi /etc/nginx/conf.d/maintenance


ファイルの内容は以下のとおりです。 

設定ファイル:

  1. error_page 500 @maintenance;
  2. # Set Env
  3. set $maintenance "on";
  4. # Allow Paths
  5. if ($uri ~ "^/exclude/") {
  6.     set $maintenance "off";
  7. }
  8. # Allow IPs
  9. if ($remote_addr ~ "xxx.xxx.xxx.xxx") {
  10.     set $maintenance "off";
  11. }
  12. if ($http_x_forwarded_for ~ "xxx.xxx.xxx.xxx") {
  13.     set $maintenance "off";
  14. }
  15. # maintenance
  16. if ($maintenance = "on") {
  17.     return 500;
  18. }
  19. location @maintenance {
  20.     rewrite ^(.*)$ /maintenance.html break;
  21. }

※「xxx.xxx.xxx.xxx」の部分には、通常画面の表示を許可するIPアドレスを入れます。


準備3.nginx設定ファイルの変更

コマンド例:

  1. $ sudo vi /etc/nginx/nginx.conf


serverコンテキスト内に以下の設定を追加します。 includeの行は、通常コメントアウトしておき、メンテナンス時のみ有効にして切り替えます。

設定ファイル:

  1. server {
  2.     ...
  3.     #include /etc/nginx/conf.d/maintenance;
  4.     rewrite ^/maintenance.html(.*)$ https://$host/ permanent;
  5.     ...
  6. }


実際の切替手順は以下のとおりです。


1.nginx設定ファイルの変更

コマンド例:

  1. $ sudo vi /etc/nginx/nginx.conf

先ほど追加したserverコンテキスト内のinclude行を有効化し、nginx.confファイルを保存します。


設定ファイル:

  1. server {
  2.     ...
  3.     include /etc/nginx/conf.d/maintenance;
  4.     rewrite ^/maintenance.html(.*)$ https://$host/ permanent;
  5.     ...
  6. }


2.nginxのリロード

コマンド例:

  1. $ sudo nginx -s reload


3.メンテナンスページへの切り替えを確認

実際にWebブラウザ等からアクセスを試して確認します。


4.通常のページに戻すときは

上記の実施1で変更したnginx設定ファイルを元に戻し(つまり有効化したinclude行をコメント化して)nginxをリロードします。そして通常のページ表示に戻ったことを確認し完了です。


nginxの設定ファイル(通常時):

nginxのリロード:


以下の記事を参考にさせていただきました。

ありがとうございます。


参考サイト

nginxでメンテナンスページを表示させる。改良版

※掲載内容は、記事公開時点のものです。紹介されているサービス内容は変更される場合がありますので、ご利用の際は事前にサービス提供元等をご確認ください。

銀座ITラボ | FirebaseやAWSに関する技術情報を配信中

銀座ITラボは、iOS/Androidアプリなどのスマホアプリ、Firebase、AWSなどのクラウドサービス、Webシステム等の技術情報に関する記事を紹介するシンプルメーカーのオウンドメディアです。