2011-07-08 22 views
5

tengo este requisito, cuando hay múltiples aplicaciones Rails. Cada aplicación se implementa en dos servidores de aplicaciones (app1 y app2) y se equilibran de carga mediante nginx en un servidor independiente (lb).nginx en PROXY_PASS servidor independiente para múltiples aplicaciones con rieles sub URI de pasajeros independiente en diferentes cajas

La caja lb contiene nginx con sabor de vainilla sin plugins de pasajeros. Las aplicaciones de rieles se implementan solo para pasajeros.

aplicaciones Todos los carriles tienen que ejecutarse en el mismo dominio pero con diferente sub_uri, como a continuación

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

Tengo la caja lb configuración de nginx algo parecido a continuación.

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

Con esta configuración, la aplicación se ejecuta en independiente de pasajeros en app1 y app2 genera un error que no es capaz de encontrar cualquier ruta/rails1 /.

Este artículo "How To Deploy Phusion Passenger To A Subdirectory, Routing Errors, And Restarting" trata de abordar el mismo problema, pero se sugiere el cambio de las rutas, que no desea hacer. Las aplicaciones de Rails con las que trato son de la misma base de código, pero están personalizadas para instancias específicas que atienden a un cliente específico.

En plug-in de pasajeros para el servidor Nginx, hay una passenger_base_uri que ayuda en la creación de un sub URI de la aplicación. ¿Cuál es el equivalente de lo mismo en caso de pasajeros independientes? ¿O me estoy perdiendo algo fundamental aquí? Cualquier ayuda, sugerencias ayudarían.

Respuesta

0

le daría prueba, utilizando el rewrite module:

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

Es una expresión regular por lo que podría ir en el fuego si el URL contiene realmente eso. Además, este aún no funciona para direcciones sin la barra al final, así que mira esto.

Cuestiones relacionadas