2011-07-08 10 views
5

Mam to wymaganie, jeśli jest wiele aplikacji szyny. Każda aplikacja jest wdrażana na dwóch serwerach aplikacji (app1 i app2) i są one równoważone za pomocą nginx na oddzielnym serwerze (lb).nginx na oddzielnym serwerze proxy_pass do wielu aplikacji railsowych z sub URI na samodzielnym stanowisku pasażera w różnych skrzynkach

W pudełku Ib zawiera zwykły vanilla nginx bez wtyczek dla pasażerów. Aplikacje szynowe są wdrażane na osobnym stanowisku pasażera.

Wszystkie szyny aplikacje muszą działać w tej samej domenie, ale z innym sub_uri, jak poniżej

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

mam skrzynki lb konfiguracji nginx coś jak poniżej.

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; 
       ... 
     } 
     .... 
    } 
    } 

Przy tej konfiguracji, aplikacja działa na samodzielny pasażerskiego w APP1 i App2 zgłasza błąd, że nie jest w stanie znaleźć żadnej trasy/rails1 /.

Ten artykuł dotyczy problemu, ale sugeruje zmianę tras, których nie chcę robić Aplikacje Railsowe, z którymi mamy do czynienia, mają tę samą podstawę kodu, ale są dostosowane do konkretnych instancji obsługujących konkretnego klienta.

W wtyczce dla pasażerów serwera Nginx znajduje się pole Pasażer_bazy, które pomaga w ustawieniu podrzędnego URI dla aplikacji. Jaki jest ekwiwalent tego samego w przypadku samodzielnego pasażera? Czy może brakuje mi czegoś fundamentalnego? Każda pomoc, sugestie pomogłyby.

Odpowiedz

0

spróbuj tego, używając rewrite module:

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

Jest to wyrażenie regularne, więc może iść na ogień, jeśli adres URL zawiera w rzeczywistości to. Również ten nie działa jeszcze dla adresów bez końcowego ukośnika, więc sprawdź to.

Powiązane problemy