2010-02-23 4 views
2

J'ai donc deux applications que je veux exécuter sur un serveur. Une application que je voudrais être l'application « par défaut » - qui est, toutes les URL doivent être envoyées cette application par défaut, sauf pour un certain chemin, permet de l'appeler /foo:Plusieurs applications en rack sur nginx + passager, une en tant que root, l'autre pas ... config help

http://mydomain.com/  -> app1 
http://mydomain.com/apples -> app1 
http://mydomain.com/foo  -> app2 

Mes deux porte des applications sont installées comme ceci:

/var 
    /www 
    /apps 
     /app1 
     app.rb 
     config.ru 
     /public 
     /app2 
     app.rb 
     config.ru 
     /public 
    app1 -> apps/app1/public 
    app2 -> apps/app2/public 

(app1 et app2 sont des liens symboliques aux annuaires publics de leurs applications respectives). Ceci est la configuration des passagers pour les sous URIs décrit ici: http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri

Avec la configuration suivante, j'ai /foo va APP2:

server { 
    listen 80; 
    server_name mydomain.com; 
    root /var/www; 
    passenger_enabled on; 
    passenger_base_uri /app1; 
    passenger_base_uri /app2; 

    location /foo {    
    rewrite ^.*$ /app2 last; 
    } 
} 

Maintenant, comment puis-je app1 pour ramasser tout le reste? Je l'ai essayé ce qui suit (placé après la directive location /foo), mais je reçois 500 avec une redirection interne infinie:

location/{ 
    rewrite ^(.*)$ /app1$1 last; 
} 

J'espère que la directive last empêcherait que redirect infini, mais je suppose que non. Ma réécriture /foo fonctionne toujours. Et je peux encore aller à http://mydomain.com/app1.

Des idées? Merci!

+0

serverfault.com – hobodave

+0

Juste posté là ... Je supprimerais celui-ci si je savais comment, désolé! –

Répondre

1

Une façon consiste à créer un nouveau fichier config.ru qui distribue la demande à l'application correcte.

# /var/www/apps/config.ru 
require './app1/app1' 
require './app2/app2' 

map ('/') { run App1 } 
map ('/foo') { run App2 } 

Bien sûr, cela signifie que vos applications doivent être conçues de manière à pouvoir vivre sur le même espace d'exécution.

Questions connexes