#title マルチサイト構築(Apacheバーチャルホスト設定)するには * '''対象とするUbuntuのバージョン''' * すべて Debian/Ubuntuのapache2パッケージは、マルチサイトを構築(バーチャルホストを設定)しやすいように注意深くパッケージングされています。 (ただし、その構築・設定を手軽に簡単に行えるGUIツールやWebインターフェースは現在のところありませんので、CUI・コンソールからの作業が必要です。) そのため、apacheプロジェクト自身が配布しているオリジナルのapacheや、Debian/Ubuntu以外のLinuxディストリビューションのapacheのrpmパッケージなどとは少々ディレクトリ構成や設定ファイルの位置・内容、作法が異なります。 慣れればこちらの方が美しい実装と感じるのですが、Debian/Ubuntuの作法に従って設定を記述している日本語のドキュメントがなかなかなかったりします。本文書はその一つになれるように作成されました。 ここでは、Ubuntuサーバーにapacheをインストールし、それをクライアントPCのWebブラウザで参照する、という前提で進めます。  *サーバー: Ubuntu(apacheをインストールするサーバー)・・・クライアントPCと同じノードの固定IPアドレスを設定するものとします。何でもいいのですが、ここではCクラスの固定IPアドレス192.168.0.100を設定するものとします。  *クライアントPC: Ubuntu等のLinuxやMac、Windows、等(Webブラウザでサーバーを参照するコンピューター)・・・DHCPでCクラスの192.168.0.xが割り振られるものとします。 (なお、実際の専用サーバーにはもちろんグローバルIPアドレスを用いるものですが、家庭内LANやオフィスLANのプライベートIPアドレス/ローカルIPアドレス環境で試せるように、ここではプライベートIPアドレス/ローカルIPアドレスを用いて記述します。) ▼Ubuntuサーバーにapache2パッケージをインストール {{{ sudo apt-get install apache2 }}} 次のようなエラーメッセージが表示されることがあるかもしれません。 {{{ apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName ...done. }}} このエラーメッセージは、hostsファイルの設定により解消できますので、このまま次の手順に進みます。 ▼次のコマンドで、Ubuntuサーバーの現在の/etc/hostsを確認しましょう。 {{{ cat /etc/hosts }}} 次のようなデフォルト設定が表示されると思います。 {{{ 127.0.0.1 localhost 127.0.1.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts }}} これを次のように編集します。 ▼/etc/hosts {{{ 127.0.0.1 localhost.localdomain localhost localdomain 192.168.0.100 myhost.mydomain myhost mydomain }}} ここでのポイントは、 * 「IPアドレス」は、クライアントPCと同一ノードのものを設定(例:クライアントPCがクラスCの場合、192.168.0.x等) * 「IPアドレス」の次に「ホスト名.ドメイン名」「ホスト名」「ドメイン名」の順で記述 することです。 例えば、次のように「IPアドレス」「ホスト名」「ホスト名.ドメイン名」の順で記述すると、apacheのエラーメッセージが解消されなかったり、期待している通りには動作してくれない場合もありますので注意しましょう。 {{{ 127.0.0.1 localhost localhost.localdomain 192.168.0.100 myhost myhost.mydomain }}} また、最後に「ドメイン名」を記述しているのは、ホスト名なしにドメイン名だけで表示させることができるようにするためです。(ですので、最後に「ドメイン名」を必ず記述しなければならないというわけではありません。) * http://localhost/ * http://localhost.localdomain/ * http://localdomain/ ←これ * http://myhost/ * http://myhost.mydomain/ * http://mydomain/ ←これ ここで、注意しなければならないのは、家庭内やオフィス内でプライベートIPアドレス/ローカルIPアドレスを使ったLAN内でこの環境を試す場合は、クライアントPC側にも同様に設定しなければならないことです。Ubuntuを含むLinuxやMac OS Xなら/etc/hosts、WindowsならWindowsディレクトリ以下か、Windows¥System32¥Drivers¥etcディレクトリ以下にhostsというファイルがあり、それを編集します。この場合、クライアントPCにもサーバーと同じように、サーバーの「IPアドレス」「ホスト名.ドメイン名」「ホスト名」「ドメイン名」の順で記述しましょう。 {{{ 192.168.0.100 myhost.mydomain myhost mydomain }}}  ▼参考: Wikipedia「hosts」格納場所  http://ja.wikipedia.org/wiki/Hosts#.E6.A0.BC.E7.B4.8D.E5.A0.B4.E6.89.80 ここまでの設定で、クライアントPCのWebブラウザから、次のURLでUbuntuのApacheパッケージのデフォルトのページが表示できることを確認しましょう。 * http://192.168.0.100/ * http://myhost/ * http://myhost.mydomain/ * http://mydomain/ 次のようなapache2パッケージのデフォルトの簡潔な内容のページ(/var/www/index.html)が表示されます。 {{{ It works! This is the default web page for this server. The web server software is running but no content has been added, yet. }}} Apacheの設定ファイルは/etc/apache2ディレクトリ以下に格納されています。 どのようなディレクトリやファイルがあるのか確認してみましょう。 {{{ ls -al /etc/apache2/ }}} 次のように表示されます。 {{{ drwxr-xr-x 7 root root 4096 2010-01-12 09:46 . drwxr-xr-x 88 root root 4096 2010-01-13 06:32 .. -rw-r--r-- 1 root root 8097 2009-08-18 21:01 apache2.conf drwxr-xr-x 2 root root 4096 2010-01-12 23:40 conf.d -rw-r--r-- 1 root root 551 2009-08-18 21:01 envvars -rw-r--r-- 1 root root 0 2010-01-12 09:14 httpd.conf -rw-r--r-- 1 root root 31063 2009-08-18 21:01 magic drwxr-xr-x 2 root root 12288 2010-01-12 23:37 mods-available drwxr-xr-x 2 root root 4096 2010-01-13 02:24 mods-enabled -rw-r--r-- 1 root root 513 2009-08-18 21:01 ports.conf drwxr-xr-x 2 root root 4096 2010-01-13 04:45 sites-available drwxr-xr-x 2 root root 4096 2010-01-13 04:26 sites-enabled }}} このうち、マルチサイト(バーチャルホスト)の設定は、sites-availableディレクトリ内のファイルで設定します。 デフォルトでは、sites-availableディレクトリには、文字通りdefaultファイルとdefault-sslファイルが存在します。 {{{ ls -al /etc/apache2/sites-available }}} {{{ drwxr-xr-x 2 root root 4096 2010-01-13 04:45 . drwxr-xr-x 7 root root 4096 2010-01-12 09:46 .. -rw-r--r-- 1 root root 948 2009-08-18 21:01 default -rw-r--r-- 1 root root 7364 2009-08-18 21:01 default-ssl }}} (https://でアクセス可能な設定はdefault-sslをベースに設定しますがそれは本文書の範囲外なのでここでは記述しません。) defaultファイルの内容を確認してみましょう。 {{{ cat /etc/apache2/sites-available/default }}} 次のように表示されます。 {{{ ServerAdmin webmaster@localhost DocumentRoot /var/www Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 }}} このdefaultファイルを同じディレクトリ内にコピーします。コピー先のファイル名はドメイン名を用いてmydomainというファイル名にします。 {{{ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mydomain }}} 無事コピーされたかどうか確認しましょう。 {{{ ls -al /etc/apache2/sites-available }}} 次のように表示されます。 {{{ drwxr-xr-x 2 root root 4096 2010-01-13 04:45 . drwxr-xr-x 7 root root 4096 2010-01-12 09:46 .. -rw-r--r-- 1 root root 948 2009-08-18 21:01 default -rw-r--r-- 1 root root 7364 2009-08-18 21:01 default-ssl -rw-r--r-- 1 root root 951 2010-01-13 04:45 mydomain }}} 次に、このmydomainファイルを編集します。 {{{ sudo vi /etc/apache2/sites-available/mydomain }}} 必須な変更箇所は、次の箇所です。 * 先頭のVirtualHostの行 必須では有りませんが、次の箇所も編集しましょう。 * ServerAdminの行・・・・ここでは適当にwebmaster@mydomainと設定します。 * DocumentRootの行・・・ここでは自分のホームディレクトリ/home/myaccount以下にmydomainディレクトリを作成し、それを設定します。 編集した後の内容は次のようになります。 {{{ ServerAdmin webmaster@mydomain DocumentRoot /home/myaccount/mydomain Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 }}} DocumentRootを変更した場合は、その設定通りにホームディレクトリにDocumentRootとなるディレクトリmydomainを作成します。 {{{ mkdir mydomain }}} ホームディレクトリにテンポラリなindex.htmlを作成します。 {{{ echo testpage > mydomain/index.html }}} 次に、a2ensiteで、今作成した/etc/apache2/sites-available/mysiteを有効化します。 {{{ sudo a2ensite mysite }}} これにより/etc/apache2/sites-enabledディレクトリにmysiteのシムリンクが作成されます。次のコマンドで確認してみましょう。 {{{ ls -al /etc/apache2/sites-enabled }}} 次のように表示されます。 {{{ drwxr-xr-x 2 root root 4096 2010-01-13 04:26 . drwxr-xr-x 7 root root 4096 2010-01-12 09:46 .. lrwxrwxrwx 1 root root 26 2010-01-12 09:14 000-default -> ../sites-available/default lrwxrwxrwx 1 root root 22 2010-01-13 04:26 mysite -> ../sites-available/mysite }}} 最後にapacheに設定を再読み込みさせるか再起動します。 {{{ sudo /etc/init.d/apache2 reload }}} {{{ sudo /etc/init.d/apache2 restart }}} 以上で、mysiteが構築されました。 念のため確認してみましょう。クライアントPCのWebブラウザから次のURIにアクセスしてみましょう。 * http://192.168.0.100/ * http://myhost/ * http://myhost.mydomain/ * http://mydomain/ 次のように、先に設定していた/home/myaccount/mydomain/index.htmlの内容「testpage」が無事表示されれば、無事設定できたことが確認できます。 {{{ testpage }}} サイトを追加するには、上記と同様な手順を繰り返します。 * /etc/apache2/sites-available以下にファイルをコピーして編集する。(例:mysite2など) * a2ensiteコマンドの実行(例:sudo a2ensite mysite2) * apacheを再読み込み/再起動 ▼参考文献 * https://help.ubuntu.com/9.10/serverguide/C/httpd.html