Apache httpd 2.4でも503を返すようにする

自宅サーバが起動しなくなったのでLighttpdで全ページ503を返すようにしました．

Lighttpdで全ページ503を返す – matoken’s meme

思ったよりアクセスが多いのでアクセスの多いドメインのDNSを変更して外のサーバに向けることにしました．
このサーバはApache httpdが動いているのでLighttpdと同じ設定は使えないので少し調べて設定してみました．

対象ドメインの設定を作成．ここでは「 sub1.example.org 」としています．

`/etc/apache2/sites-enabled/090-sub1.example.org.conf

<VirtualHost *:80>
ServerName sub1.example.org
Redirect permanent / https://sub1.example.org/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName sub1.example.org
ServerAdmin webmaster@example.org
DocumentRoot /var/www/sub1.example.org/
RedirectMatch 503 ^/(?!503\.html) (1)
ErrorDocument 503 /503.html
ErrorLog ${APACHE_LOG_DIR}/error_sub1.example.org.log
CustomLog ${APACHE_LOG_DIR}/access_sub1.example.org.log combined
SSLCertificateFile /etc/letsencrypt/live/sub1.example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sub1.example.org/privkey.pem
</VirtualHost>
</IfModule>

すべてのURLを /503.html に転送します．

対象ドメインの証明書を旧サーバからコピーしておきます．

ディレクトリ作成

$ sudo mkdir -p /etc/letsencrypt/tmp/sub1.example.org/

リモートサーバの /etc/letsencrypt/live/sub1.example.org/fullchain.pem と /etc/letsencrypt/live/sub1.example.org/privkey.pem を /etc/letsencrypt/tmp/sub1.example.org/ 以下に置く．

権限設定してリンクを貼ります．

$ sudo chown -R root.ssl-cert /etc/letsencrypt
$ sudo ln -s /etc/letsencrypt/tmp/sub1.example.org/fullchain.pem /etc/letsencrypt/live/sub1.example.org/fullchain.pem
$ sudo ln -s /etc/letsencrypt/tmp/sub1.example.org/privkey.pem /etc/letsencrypt/live/sub1.example.org/privkey.pem

503用のhtmlを用意しておきます．

$ sudo -u www-data mkdir /var/www/sub1.example.org
$ sudo -u www-data vi /var/www/sub1.example.org/503.html

apache httpd再起動

$ sudo service apache2 restart

DNS書き換え前に検証の行えるローカルのPCのhosts書き換えて動作テスト．

$ echo "192.0.2.5 sub1.example.org" | sudo tee -a /etc/hosts (1)
$ w3m -dump_head head http://sub1.example.org/piyo | grep ^HTTP/ (2)
HTTP/1.1 503 Service Unavailable
$ w3m -dump_extra head http://sub1.example.org/piyo | lv (3)

新しいサーバのIPアドレスを指定する．

503が帰ってくることを確認

証明書も確認

動作確認が出来たら /etc/hosts を戻しておく．

この後，DNS書き換えを行いDNSが伝播してから再度動作確認を行う．

対象ドメインのSSL証明書更新もしておく．

$ sudo certbot certonly -d sub1.example.org

という感じでサーバ移行しました．
それまで自宅に9000アクセスほど有りましたが8500程は外のサーバに行くようになりました．

環境

$ dpkg-query -W apache2 certbot
apache2 2.4.38-3+deb10u7
certbot 0.31.0-1+deb10u1
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ arch
x86_64