管理人は2つのWebサイトを運用しています。
外側から見てもわかりませんが、この図にまとめてあるように、1台の物理マシンのVMWare Server上で2台の仮想Linuxを動かし、そのそれぞれが別々のサイトをホストしています。いろいろ歴史的な経緯があってこのような形になっているのですが、はっきり言って無駄です。
何よりも無駄なのがISPの料金で、2台のLinuxサーバのApacheをそれぞれ別々のドメインで外部に公開するために、わざわざ固定IPを2つ割り当ててくれるISPを利用しているのですが、当たり前ですが、普通よりもかなり割高です。
ということで、とうとう2台のWebサーバを集約することにしました。
とはいってもやることは単純で、Apacheの仮想サーバ機能を利用するだけで事足りました。
もっとも、数点躓いた点があったので、簡単にまとめておきます。
1. 移行元/移行先のサーバ、移行先ディレクトリ、仮想サーバ方式を決める
どちらでも特に問題はありませんが、動かなくなると困る方を移行先にしました。また、移行元のコンテンツを動かす先は/var/www2とすることにしました。仮想サーバの方式はいくつかありますが、今回は同じIPで複数のドメインを収容することになるので、必然的に名前ベースの仮想サーバで構築することにしました。
2. 移行元サーバのコンテンツを動かす
CentOSの場合、デフォルトで/var/www/以下にすべてのコンテンツが入るはずなので、それをTAR+GZIPで固めてから移行先のサーバにSCPし、用意した/var/www2/以下に展開しておきます。
3. 移行元サーバのhttpd.confから仮想サーバ用の設定ファイルを作成する
色々カスタマイズが入っていたので、その設定をそのまま移行する必要がありました。Webで見つかる仮想ホストの設定例は非常に簡易なものばかりですが、かなり複雑な設定をしててもそのまま仮想サーバ化することができます。
なお、仮想サーバを導入する場合、移行される側のWebサーバも仮想サーバとして動かす必要があります。詳細は確認していませんが、仮想ホストの設定を記述すると、仮想サーバでない部分の設定は(おそらく)無視されるので、現在の設定内容をそのまま仮想サーバの設定として記述すればいいはずです。まず、既存のhttpd.confの一番下にある仮想サーバ関連の設定を有効にし、それぞれの仮想サーバの設定を記述した別ファイルをincludeする記述を追加します。なお、現在有効なのhttpd.confを直接修正しても稼働中のApacheに影響は及ぼしませんが、失敗したときに備えて現在稼働中の設定を退避した上で、編集を行うようにしましょう。
変更後のイメージは以下の通りです。
### Section 3: Virtual Hosts # # (中略) # # Use name-based virtual hosting. # NameVirtualHost *:80 # # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. # # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for requests without a known # server name. # include conf/httpd.starplatinum.conf include conf/httpd.bflets.conf
デフォルトでは無効になっているNameVirtualHostを有効にし、すべてのインターフェースからの80番ポートへのアクセスを受け取るように記述します。一番下の2行が、仮想化する各サーバの設定を記述したファイルです。それぞれ以下のような記述になっています。
ServerAdmin root@v160-251-76-216.k2a5.static.cnode.io ServerName www.starplatinum.jp DocumentRoot "/var/www/html" Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks # For WordPress # AllowOverride FileInfo AllowOverride All Order allow,deny Allow from all ErrorLog logs/error_log SetEnvIf Remote_Addr 192.168.0. no_log CustomLog logs/access_log combined env=!no_log Alias /icons/ "/var/www/icons/"Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"AllowOverride None Options None Order allow,deny Allow from all
これは移行される側の設定(httpd.starplatinum.conf)ですが、一部Wordpress用に設定変更してある個所をそのまま持ち込むために、よく見る設定例よりも少々複雑かつ長くなっています。ログを解析にかけているので、ログの出力先は仮想化前と同じにしてあります。
ServerAdmin root@bflets.dyndns.org ServerName www.bflets.dyndns.org DocumentRoot "/var/www2/html" Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks AllowOverride FileInfo Order allow,deny Allow from all ErrorLog logs/bflets.error_log CustomLog logs/bflets.access_log combined Alias /icons/ "/var/www2/icons/"Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all Alias /icon66/ "/var/www2/icon66/"Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all Alias /icon6.95/ "/var/www2/icon6.95/"Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all ScriptAlias /cgi-bin/ "/var/www2/cgi-bin/"AllowOverride None # Options None Options Includes ExecCGI FollowSymLinks Order allow,deny Allow from all
こちらはさらに長いですが、複数のAliasが設定してあり、それは持っていかないとコンテンツが破たんしてしまうので、そのままにしてあります。これらについては、元々のhttpd.confのコメント行 + Apacheそのものに関連する設定を削除したものを、<VirtualHost>で囲っただけですが、ログが別々に出力されるように、ログの出力先だけ変更してあります。
4. 設定の確認を行う
仮想化の設定は終わったので、以下のコマンドで設定内容を確認します。すでにApacheが動作している環境であっても問題なく実行できるので、移行先のサーバで気軽に実行できます。
[root@www conf]# /usr/sbin/httpd -S VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: _default_:443 www.starplatinum.jp (/etc/httpd/conf.d/ssl.conf:81) *:80 is a NameVirtualHost default server www.starplatinum.jp (/etc/httpd/conf/httpd.starplatinum.conf:1) port 80 namevhost www.starplatinum.jp (/etc/httpd/conf/httpd.starplatinum.conf:1) port 80 namevhost www.bflets.dyndns.org (/etc/httpd/conf/httpd.bflets.conf:1) Syntax OK
設定がうまくいっていれば、”Syntax OK”と表示されるはずです。その他についても、見れば何となく意味は分かるでしょう。
5. 新しい設定でサーバを動かす
あとは、新しい設定でサーバを起動するだけです。再起動後、一通りアクセスしてみて異常がないかどうかを確認しておきましょう。
実は管理人は、移行される側のサーバに導入されていたMovable Typeの存在を忘れていて、DBがないために静的なHTML以外の部分がエラーになってしまいました。
このあとあわててMySQL上のDBの移行を行うのですが、それは次のエントリで。