2010-01-22 55 views
1

在單個應用程序下的多個客戶應用程序實例。Rails下的Software-As-a-Service的Apache RequestHeaders

我需要的是允許多個用戶,連接到我的Apache Web服務器,通過將不同的網址,如: customer1.myhost.com company1.myhost.com company2.myhost.com 等

我希望我的Apache服務器執行的操作是將所有未被定向到現有主機列表 (如trac.myhost.com和https://myhost.com)的所有請求傳遞給我的Rails應用程序,方法是設置RequestHeader以標識請求主機,如:

RequestHeader「INSTANCE _NAME「= customer1 #for customer1.myhost.com

感謝您的幫助!

Ps .:最終目標是提供軟件切片作爲服務,但讓所有這些客戶在1個應用程序下運行。每個客戶不需要1個應用

回答

2

使用一個標準的虛擬主機配置,你可以這樣做:

NameVirtualHost *:80 

<VirtualHost *:80> 
    ServerName app.example.com 
    ServerAlias *.example.com 

    DocumentRoot /web/app.example.com/public 
</VirtualHost> 

這將捕獲的,尚未被其他虛擬主機條目拍攝的所有請求。

當您的應用程序接收到請求時,您將使用提供的主機名設置請求變量。這是提供給任何的ActionController:

request.host 

從那裏,你可以加載在某種的before_filter的適當的數據,如像典型的做法:

before_filter :load_client 

def load_client 
    @client = Client.find_by_hostname!(request.host) 
rescue ActiveRecord::RecordNotFound 
    render(:partial => 'client_not_found', :status => :not_found) 
end 

只要客戶端的主機名填充正確地說,這將在每個頁面加載中找到它們。