2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

apache でメンテナンス画面中でもページ閲覧可能にしたい

Posted at

メンテナンス中でも開発者であったり、メンテナンスしている側は動作にウェブサイトの画面にどんな影響があるのかみたいので、メンテナンスページ見えてほしくないですよね。

apache のサーバーの場合は、メンテナンスページを見えないようにすることができます。nginx でもできますが、今回はapache で実装進めていきたいと思います。

前提

  • apache のインストールが完了していること
    (バージョンは問いません) apache2 よりhttpd でインストールしているほうが好ましいと思います。ディレクトリ構造が異なったと思います。

  • DocumentRoot ディレクトリを作成していること
    (これも特に指定なしです)

  • conf ファイルは /etc/httpd/conf.d/ 配下に作成しています
    (httpd.conf で include してたら問題ないです)

virtualhost のconf に直接設定する場合

example.com.conf に設定します。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/test-example/public_html

    ErrorLog logs/example.com-error_log
    CustomLog logs/example.com-access_log common

    ErrorDocument 503 /maintenance.html

    <IfModule mod_rewrite.c>
           RewriteEngine On
           RewriteCond %{REQUEST_URI} !=/maintenance.html
           RewriteCond %{REMOTE_ADDR} !=<your_ip>
           RewriteRule ^.*$ - [R=503,L]
    </IfModule>
</VirtualHost>

この場合は、同じconf 内に記述しているので、conf をいちいち横断する必要がなくなります。ただ、少しconf を複雑にしてしまいかねないので、その辺りは注意です。

メンテナンス設定解説

メンテナンスの設定は、この部分です。

    <IfModule mod_rewrite.c>
           RewriteEngine On
           RewriteCond %{REQUEST_URI} !=/maintenance.html
           RewriteCond %{REMOTE_ADDR} !=<your_ip>
           RewriteRule ^.*$ - [R=503,L]
    </IfModule>

ロジック自体はシンプルです。
Rewrite engine をオンにします、つまりリダイレクトを発生させるように設定します。そして、Rewritecond (= 条件分岐)の条件に当てはまらなかったら、503 にしてください!という記述です。

つまり、

① RewriteEngine on => リダイレクトする準備できたよ~~
↓
② maintenance.html 以外にアクセス来た、かつ 自分の指定したIP ではなかったら、
全部のアクセスを503 とするよ~~~
↓
③ おっ、503 きたから、ErrorDocument で指定したページを返そう

という流れですね。
RewriteCond はデフォルトで「かつ(&)」だったと思いますが、間違いがあれば、すいません。

conf ファイルをわける場合

先ほどと同じように設定します。今回はファイルを分割する方法で設定してみました。

#example.com.conf の中身
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/test-example/public_html

    Include conf.d/mainte.conf

    ErrorLog logs/example.com-error_log
    CustomLog logs/example.com-access_log common

    ErrorDocument 503 /maintenance.html
</VirtualHost>

# mainte.conf の中身

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# rewrite_maintenance.conf
ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteCond %{REMOTE_ADDR} !=127.0.0.1
  RewriteCond %{REMOTE_ADDR} !=<your_ip>
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

今回の設定のメリットとしては、conf を汚さないことですね。もし何か上手くいかない設定があった場合でもファイルを分けているので、分離できている部分では少し安心ですね。Include をVirtualhost のディレクティブで指定するだけで呼び出すことが可能です。

設定ができたら、apache をreload してあげて、設定が完了です。
メンテナンスページが表示されなければ、成功です!!されたら、失敗です。
どこか設定が間違っている可能性ありです。

まとめ

メンテナンス時に、メンテ用の設定ができるので、ぜひ使ってみてください。

参考URL

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?