somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【apache】仮想ホストの設定

開発するソースがデフォルトのドキュメントルートに存在していない場合、aliasを作成してlocalhost/xxxとしてアクセスしていました。これをサーバ名を使ってアクセスできるように仮想ホストの設定を行いました。

仮想ホスト

同じサーバで異なるドメインを管理する機能のことです。サーバは1つですが、それぞれ違う名前のドメインにアクセスされたとき、それぞれのドメインが個別に動くように設定できます。

この機能には二通りあります。

それぞれ、IPベースと名前ベースといいます。

設定

apacheのconf/extraディレクトリにある設定ファイル「httpd-vhosts.conf」に以下の記述を加えます。

<VirtualHost *:80>
    ServerAdmin  postmaster@chat.localhost
    DocumentRoot "C:/work/programming/php/chat/web"
    ServerName   chat.localhost
#    ServerAlias  www.chat.localhost
    ErrorLog     "logs/chat.localhost-error.log"
    CustomLog    "logs/chat.localhost-access.log" combined

   <Directory "C:\work\programming\php\chat\web">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

httpd-vhosts.confは、httpd.confにて読み込まれています。

# Virtual hosts
Include "conf/extra/httpd-vhosts.conf"

VirtualHostディレクティブを用いて設定します。まず、80番ポートでのアクセスに対して、サーバ名を指定しています。必要であれば別名もつけることで、別名でのアクセスがサーバ名と同じように処理されます。これにより、振り分けができるようになりました。

サーバごとのログを切り分けるために、logの設定も行っています。

最後に、ドキュメントルート以下に対するアクセス権をDirectoryディレクティブで設定しています。

名前ベースの設定

名前ベースの場合、httpd-vhosts.confのNameVirtualHostの設定をコメントをはずしてください。ローカルで使う分には、ポートだけ指定しておけばいいと思います。

# Use name-based virtual hosting.
#
##NameVirtualHost *:80

設定ファイルの構文チェック

apacheのbinディレクトリにて下記コマンドを実行し、httpd.confの構文をチェックします。

httpd.exe -t

下記コマンドは、httpd-vhosts.confの確認です。

apacheのbinディレクトリにて下記コマンドを実行し、確認します。

httpd.exe -S

windowsでの確認のため、httpd.exeです。Linuxの場合、httpdのシェルやapachectlでもできると思います。

hostsの修正

ドメインを設定したので、ドメインとIPアドレスを対応付けるために修正します。これで確認できると思います。

ここまでは問題ないと思います。ただ、自分は.htaccessでURL書き換えに用いるmod_rewriteでRewriteBaseを「/chat」と設定していたために、500エラーが出てはまってしまいました。

設定ファイルが正しいのに動かない場合、アプリごとに個別で設定できるファイルを確認しましょう。