ググると古い情報がたくさんでてきて、シンボリックリンクを貼るとか貼らないとか、貼らないと動かないという内容もあったりでよくわからなくなってしまったので、ちゃんとドキュメントを読んで理解の範疇でまとめました。
Passenger 5.0.13 + Rails 4.2.3 を使いました。
例1. サブディレクトリだけRailsアプリ
次のは / にアクセスしたときは、静的なHTML /var/www/default/index.html を見て /app1 の場合は /var/www/app1 に capistrano でデプロイした Rails アプリを見る場合の設定です。
URL | 実際のパス |
---|---|
/ | /var/www/default/index.html |
/app1 | /var/www/app1/current |
<VirtualHost *:80>
ServerName xxx.sakura.ne.jp
DocumentRoot /var/www/default
<Directory /var/www/default>
Allow from all
Options -MultiViews
</Directory>
<Directory /var/www/*/current/public>
Allow from all
Options -MultiViews
</Directory>
# app2を作る場合は次の5行をコピペで増やしてapp2にする
Alias /app1 /var/www/app1/current/public
<Location /app1>
PassengerBaseURI /app1
PassengerAppRoot /var/www/app1/current
</Location>
</VirtualHost>
例2. 全部Railsアプリ
次のは / もRailsアプリ app0 になっている例です。
URL | 実際のパス |
---|---|
/ | /var/www/app0/current |
/app1 | /var/www/app1/current |
<VirtualHost *:80>
ServerName xxx.sakura.ne.jp
<Directory /var/www/*/current/public>
Allow from all
Options -MultiViews
</Directory>
DocumentRoot /var/www/app0/current/public
# app2を作る場合は次の5行をコピペで増やしてapp2にする
Alias /app1 /var/www/app1/current/public
<Location /app1>
PassengerBaseURI /app1
PassengerAppRoot /var/www/app1/current
</Location>
</VirtualHost>
Railsアプリのデプロイ先は /var/www/* 以下にまとめることで、Directory設定を共通化しています。
またRailsは、Passengerが設定してくれる環境変数 RAILS_RELATIVE_URL_ROOT を考慮して、自動的にパスにプレフィクスを付与してくれるので、昔はやけに難しかった記憶があるのですが、今では特別に何かする必要はなくなりました。
例3. 全部Railsアプリのはずだったが一部だけ静的HTMLの場合
例2と同じ構成だけど app3 だけは静的HTMLの場合。
URL | 実際のパス |
---|---|
/ | /var/www/app0/current |
/app1 | /var/www/app1/current |
/app3 | /var/www/app3/current/index.html |
<VirtualHost *:80>
ServerName xxx.sakura.ne.jp
<Directory /var/www/*/current/public>
Allow from all
Options -MultiViews
</Directory>
DocumentRoot /var/www/app0/current/public
# app2を作る場合は次の5行をコピペで増やしてapp2にする
Alias /app1 /var/www/app1/current/public
<Location /app1>
PassengerBaseURI /app1
PassengerAppRoot /var/www/app1/current
</Location>
# Railsアプリではないとき。例2の設定にこの5行だけ追加
Alias /app3 /var/www/app3/current
<Location /app3>
PassengerEnabled off
Options All
</Location>
</VirtualHost>
Passenger を無効にする PassengerEnabled off がポイントです。無効にしなくても /app3/index.html のように直リンクであれば一応見れますが、/app3 にアクセスするとPassengerがRailsアプリと勘違いしてエラーになります。ファイル一覧機能(Options Indexes)などを正しく動作させるためにも無効にしておく方がよいです。