2011-07-08 4 views
5

複数のレールアプリケーションがある場合、この要件があります。各アプリケーションは2つのアプリケーションサーバー(app1とapp2)に配備され、別々のサーバー(lb)にnginxを介して負荷分散されます。別のサーバー上のnginx proxy_pass複数のレールへのアプリケーションサブウィンドウのサブウィンドウで異なるボックスにスタンドアロン

lbボックスには、乗客用プラグインなしのプレーンバニラnginxが含まれています。 レールアプリケーションは、乗客スタンドアロンに配備されています。

すべてのレールのアプリケーションでは、私は以下のようなポンドボックスnginxの設定に何かを持っている

 
http://www.example.com/rails1 
http://www.example.com/rails2 

の下のように、同じドメインではなく、異なるsub_uriで実行する必要があります。この設定で

http { 
     ... 
     upstream rails1_cluster { 
     ip_hash; 
     server app1.server:3001; 
     server app2.server:3001; 
     } 

     upstream rails2_cluster { 
     ip_hash; 
     server app1.server:3002; 
     server app2.server:3002; 
     } 

     ... 

     server { 
     server_name www.example.com; 
     ... 
     ... 

     location /rails1 { 
       proxy_pass http://rails1_cluster; 
       ... 
     } 

     location /rails2 { 
       proxy_pass http://rails2_cluster; 
       ... 
     } 
     .... 
    } 
    } 

、APP1およびAPP2における旅客スタンドアロンで実行されているアプリは、どのルート/ rails1 /を見つけることができないというエラーがスローされます。

この記事"How To Deploy Phusion Passenger To A Subdirectory, Routing Errors, And Restarting"は同じ問題を解決しようとしますが、私はしたくないルートを変更することを提案しています。扱うRailsアプリケーションは同じコードベースであるが、特定のクライアントに対応する特定のインスタンスに合わせてカスタマイズされている。

Nginxサーバーの乗客用プラグインには、アプリのサブURIの設定に役立つpassenger_base_uriがあります。乗客単体の場合と同じものは何ですか?あるいは、私はここで何か根本的なものを逃していますかどんな助けや提案も助けになります。

答えて

0

rewrite moduleを使用して、この試してみて:

location /rails2 { 
       rewrite "/rails2/"/break; 
       proxy_pass http://rails2_cluster; 
} 

それは、URLが実際にそのが含まれている場合ので、火の上に行くかもしれない正規表現です。また、スラッシュのないアドレスではまだ動作しませんので、これを確認してください。

関連する問題