2010-02-23 11 views
2

所以我有兩個應用程序要運行在服務器上。一個應用程序,我想是「默認」的應用程序 - 也就是說,所有URL應發送默認情況下這個程序,除了一定的路徑,讓我們把它叫做/foonginx + passenger上的多機架應用程序,其中一個作爲根用戶,另一個不用... config幫助

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

我的兩個機架應用程序安裝,像這樣:

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

app1app2是符號鏈接到各自的應用程序的公共目錄)。這是這裏所描述的乘客設置爲子的URI:http://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri

用下面的配置我有/foo將APP 2:

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

現在,我怎麼APP1拿起一切?我試過以下(放在location /foo指令後),但我得到一個500具有無限內部重定向:

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

我希望last指令將阻止無限的重定向,但我想不會。我的/foo重寫仍然有效。我仍然可以去http://mydomain.com/app1

任何想法?謝謝!

+0

serverfault.com – hobodave 2010-02-23 20:12:06

+0

只是在那裏發佈...如果我知道如何,我會刪除這一個,對不起! – 2010-02-23 20:47:36

回答

1

一種方法是創建一個新的config.ru文件,該文件將請求分派到正確的應用程序。

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

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

當然,這意味着您的應用程序必須以可以在同一個執行空間上生活的方式創建。

相關問題