応答するバーチャルホストを識別する方法によって、バーチャルホストには名前ベースとIPベースの二種類があります。
名前ベースのバーチャルホストは、クライアントがHTTPヘッダの一部として告げたホスト名によってバーチャルホストへのコネクションを決定します。ひとつのIPアドレスを異なる多数のホストで共有することにより、名前ベースのバーチャルホストは不足するIPアドレスの需要を緩和します。したがって、通常は名前ベースのバーチャルホストを使うべきでしょう。
IPベースのバーチャルホストは、IPアドレスによってバーチャルホストへのコネクションを決定します。このため、それぞれのホストに固有のIPアドレスが必要になります。IPベースのバーチャルホストを選択する理由としては、SSLセキュアサーバを構築したい場合や、名前ベースのバーチャルホストに対応していない特殊なクライアントを使いたい場合などが考えられます。
# vim /var/named/mydomain.com.db
production.myapp IN A 202.212.222.232
staging.myapp IN A 202.212.222.232
myapp IN CNAME production.myapp
ゾーンファイルに新しいドメイン名を定義します。
# /sbin/service named reload
ゾーンファイルの変更を反映します。
# mkdir /etc/httpd/application
# vim /etc/httpd/conf/httpd.conf
#
# 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.
#
NameVirtualHostディレクティブを設定します。
#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf
Include application/*.conf
自分用の設定ファイルは専用のディレクトリに置くため、既存のIncludeステートメントに続けてapplication/*.confをインクルードします。
# vim /etc/httpd/application/myapp.conf
<VirtualHost *:80>
ServerAdmin mail@mydomain.com
ServerName production.myapp.mydomain.com
ServerAlias .myapp.mydomain.com
DocumentRoot /var/www/myapp/production/current/public
RailsEnv production
ErrorLog /var/log/httpd/myapp.error_log
TransferLog /var/log/httpd/myapp.access_log
<Directory /var/www/myapp/production/current/public>
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin mail@mydomain.com
ServerName staging.myapp.mydomain.com
DocumentRoot /var/www/myapp/staging/current/public
RailsEnv staging
ErrorLog /var/log/httpd/myapp.staging.error_log
TransferLog /var/log/httpd/myapp.staging.access_log
<Directory /var/www/myapp/staging/current/public>
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
バーチャルホストの定義ファイルを作成します。
# mkdir /var/www/myapp
# chown myuser:myuser /var/www/myapp
$RAILS_ROOTとなるディレクトリを作成し、それ以下のファイルとディレクトリのオーナーをroot以外にします。ここではユーザー"myuser"にしています。
Passengerでは、root権限でRailsアプリケーションを動かすことはできません。Railsアプリケーションが動作するユーザーは$RAILS_ROOT/config/environment.rbのオーナーとなりますが、environment.rbがrootの場合はnobodyユーザーで動作します。このとき、オーナーがrootである$RAILS_ROOT/logディレクトリや$RAILS_ROOT/tmpディレクトリに書き込みができず、アプリケーションが動作しないことがあります。
http://redmine.jp/tech_note/apache-passenger/