DNSの浸透期間に旧サーバーでやっておくこと
サーバー移転時に問題となるのが、DNS情報を変更した場合のDNSの浸透期間(プロパゲーション)です。 ここでは、旧サーバーへのアクセスされてしまう問題を解決します。
まずはメンテナンス画面を表示
新サーバーを公開する前にやっておく作業として、旧サーバーへのアクセスをすべてメンテナンス画面にしておくことがあります。
これについては、多くのページで書いてありますが、Apacheのバージョンが2.2以上とそうでないもので違いがあるので注意する必要があります。 旧サーバーがバージョン2.2未満である場合も多いですからね。
とりあえず、これで旧サーバーがメンテナンス画面になりますのでDNSの切り替えを行うことができます。 そしてDNSの浸透期間(プロパゲーション)の始まりです。
新サーバー公開後はリバースプロキシーする
DNSの浸透が始まると、新サーバーへのアクセスと旧サーバーへのアクセスが同時に行われますが、旧サーバーへのアクセスは数日続く場合があります。 この間「メンテナンス中です。もうしばらくお待ちください。」というメッセージを出しっぱなしにしてアクセス禁止にしておくのはあまりにも勿体無い。
そこで、旧サーバーへのアクセスを新サーバーへのアクセスに見せかけるために「リバースプロキシー」を行います。 よくサーバーの負荷分散にも用いられたりしますが、サーバー移転時にもかなり有効です。
hostsファイルの書き換え
今まで旧サーバーのIPアドレスに紐づいていたホスト名を新サーバーのIPアドレスに紐付けなおします。 場所は「/etc/hosts」です。
(新サーバーのIPアドレス) myserver.example.com
mod_proxy系を有効化
まずは、Apacheのモジュールを有効にします。 今回はApache2.0を元にしますので動的モジュールを有効化します。 httpd.conf設定ファイルを開いて、以下の3種類のモジュールを有効にします。 proxy_connect_moduleはSSL通信(https://~)を行うのに必要となるproxy_moduleの拡張モジュールです。
- proxy_module
- proxy_http_module
- proxy_connect_module
(前略) LoadModule proxy_module modules/mod_proxy.so (コメント解除) #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so(コメント解除) LoadModule proxy_connect_module modules/mod_proxy_connect.so(コメント解除) (後略)
ProxyPassを追加
次に、同じくApacheの設定ファイル内で旧サーバーのホスト名設定のディレクティブ内で「ProxyPass」の設定を行います。
httpプロトコル用:ポート番号80
ProxyPass / http://myserver.example.com/
httpsプロトコル用:ポート番号443
...(既存のSSL設定)... SSLProxyEngine on ProxyPass / https://myserver.example.com/ ProxyPassReverse / https://myserver.example.com/
Apacheを再起動
設定が完了したら、サーバーを再起動します。
# /etc/init.d/httpd restart
これで、DNSの浸透期間でも旧サーバーへのアクセスが新サーバーへ向くようになりました。
2009-12-12