本記事では、
- Webサイトのリニューアル
- 追加機能のリリース
などといった場面において、一般ユーザーからのアクセス時には、メンテナンスページが表示され、関係者(固定IP経由)からのアクセスは通常のページを表示する設定方法について詳しく解説していきます。
この設定を行うためには、固定IP(固定のグローバルIP)を所持していることが前提となります。
基本的に、スマートフォンの回線や自宅のインターネット回線は、固定IP(固定のグローバルIP)ではないのでご注意ください。
メンテナンスを正しい手順・設定で実施しなければいけない理由
Webサイトのメンテナンスはユーザーだけではなく、クローラーにも影響を与える作業であり、メンテナンスを正しい手順・設定で実施しない場合、ユーザーに対して不安を与えるだけではなく、SEOの観点からも問題が生じることになります。
そのため、Webサイトのメンテナンスを正しい手順・設定で実施しましょう。
メンテナンスの告知
このメンテナンスが計画的なものであれば、普段Webサイトにアクセスしてくれているユーザーに対して、事前にメンテナンス日時の告知をしましょう。
メンテナンスページ作成
Webサイトへアクセスしたユーザーに対して、白い画面で503 Service Unavailableというような無機質な文字列が表示されると、ユーザーは驚いてしまい、不安を感じてしまうのではないでしょうか。
そのようなユーザーの不安を軽減するため、メンテナンスページを作成して、メンテナンスページには下記を必ず記載しましょう。
- Webサイト名やロゴ
- メンテナンスの開始日時と終了予定日時
- アクセス可能なページへのリンク
Webサイト名やロゴ
Webサイト名や、ロゴなどを表示して、アクセスしたページが何のサイトなのか分かるようにします。
メンテナンスの開始日時と終了予定日時
メンテナンスの開始時日を終了予定日時を記載します。
状況によってはメンテナンスを延長する旨も記載しておく方がよいでしょう。
アクセス可能なページへのリンク
メンテナンス時にメンテナンス対象外でアクセス可能なページがある場合、そのページへのリンクを表示しておくことで、Webサイトにアクセスしてくれたユーザーをそちらのページへ誘導します。
メンテナンスページを表示
メンテナンスページをドキュメントルート直下にmaintenance.htmlとして設置した上で、.htaccessというファイルに以下の設定をコピーし、一部を変更して保存します。
ErrorDocument 503 /maintenance.html #allowed access SetEnvIf X-Forwarded-For "(^|[ ,]+)XXX\.XXX\.XXX\.XXX($|[ ,]+)" allowed_access SetEnvIf Remote_Addr "^XXX\.XXX\.XXX\.XXX$" allowed_access <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:allowed_access} !1 RewriteCond %{REQUEST_URI} !^/maintenance.html RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css|js|svg)$ RewriteRule ^.*$ - [R=503,L] </IfModule> <IfModule mod_headers.c> Header set Retry-After "Sun, 2 Aug 2020 20:00:00 GMT" </IfModule>
変更が必要な箇所は、下記の2箇所です。
SetEnvIf X-Forwarded-For "(^|[ ,]+)XXX\.XXX\.XXX\.XXX($|[ ,]+)" allowed_access SetEnvIf Remote_Addr "^XXX\.XXX\.XXX\.XXX$" allowed_access
Header set Retry-After "Sun, 2 Aug 2020 20:00:00 GMT"
以降で、設定の詳細を解説していきます。
メンテナンス設定の解説
ErrorDocument 503 /maintenance.html
503 Service Unavailable というステータス時にはドキュメントルート直下のmaitenance.htmlを表示するという指定をしています。
SetEnvIf X-Forwarded-For "(^|[ ,]+)XXX\.XXX\.XXX\.XXX($|[ ,]+)" allowed_access SetEnvIf Remote_Addr "^XXX\.XXX\.XXX\.XXX$" allowed_access
こちらで、Webサイトへアクセスしたときにメンテナンスページではなく、通常ページを表示する条件を設定します。
つまり、アクセス元である固定IPを指定します。
SetEnvIf X-Forwarded-For、SetEnvIf Remote_Addrの行のXXXの箇所には、それぞれ同一の固定IPのIPアドレスを記載してください。
例)127\.0\.0\.1など
こちらで設定した固定IPからのアクセスであれば、メンテナンスページではなく、通常のページが表示されるようになります。
許可したいIPが複数個ある場合は、次のように設定してください。
XXXとYYYはそれぞれ別のIPアドレスとします。
SetEnvIf X-Forwarded-For "(^|[ ,]+)XXX\.XXX\.XXX\.XXX($|[ ,]+)" allowed_access SetEnvIf X-Forwarded-For "(^|[ ,]+)YYY\.YYY\.YYY\.YYY($|[ ,]+)" allowed_access SetEnvIf Remote_Addr "^XXX\.XXX\.XXX\.XXX$" allowed_access SetEnvIf Remote_Addr "^YYY\.YYY\.YYY\.YYY$" allowed_access
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{ENV:allowed_access} !1 RewriteCond %{REQUEST_URI} !^/maintenance.html RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg|css|js|svg)$ RewriteRule ^.*$ - [R=503,L] </IfModule>
通常表示を許可しているアクセス以外、そして、メンテナンスページとそのメンテナンスページを表示するために必要なアセットファイル以外へのアクセスを503のステータスとするよう設定しています。
Header set Retry-After "Sun, 2 Aug 2020 13:00:00 GMT"
ここでは、クローラーに対して、この時間までサービスが利用できない(メンテナンス状態)ということを伝えています。
ここで注意いただきたいのが、GMT(グリニッジ標準時)の時間で書く必要があります。
そのため、メンテナンス終了予定時間からマイナス9時間した時間を設定しましょう。
例えば、2020年7月7日火曜日の10時にメンテナンスが完了する場合は下記となります。
Header set Retry-After "Tue, 7 Jul 2020 1:00:00 GMT"
メンテナンスページの表示の動作確認
一般ユーザーからのアクセスでは、メンテナンスページが表示されること、関係者(固定IP経由)からのアクセスは通常のページが表示されることを確認しましょう。
Webサイトの動作確認
Webサイトが正常に動作しているかどうかを確認します。
メンテナンスの解除
Webサイトの動作確認の終了後、メンテナンスを解除します。
メンテナンスを解除する場合は、メンテナンス設定を削除または設定の各行に#を追加しコメントアウトしてください。
メンテナンスが解除されたかどうかを確認するために、複数のネットワークからアクセスしてメンテナンス表示になっていないことを確認します。