2012-06-20 94 views
1

我想弄清楚部署我的RAILS應用程序(rails 3.2,apache,passenger)的方法。該應用程序有兩種不同的溝通方式。同一個導軌應用程序的多個端口

  1. 用戶連接到我們的https網站,就像通常的rails應用程序一樣。這是由一個標準的商業CA簽署的。
  2. 自動機器連接到我們的網站,並使用客戶端證書認證和檢索數據。這全部由我們自己的CA和證書管理。

目前我不考慮平衡,應用程序將運行在一臺機器上。 我無法在443上使用可選證書檢查來組合這兩種方法,因爲這會影響在同一個apache實例上運行的其他應用程序,所以我相信我需要兩個獨立的應用程序端口。

我應該如何管理? apache可以配置爲通過單獨的虛擬主機指向相同的應用程序(可能通過代理到客戶獨立)?我是否應該用一些共享庫或引擎將我的應用程序分成兩個獨立的應用程序?我應該只部署兩次指向同一個數據庫(這將如何影響緩存)?

有沒有更好的方法來區分連接端口比檢查客戶端證書,如果是這樣假設自動連接?

我對這兩種黑客都很感興趣,希望它能夠快速工作以及像這樣構建正確的導軌方式。在其他控制器

class ApplicationController < ActionController::Base 
    def api_request? 
    request.port == 443 
    end 
end 

然後:

感謝

+0

難道你不能只使用不同的域,然後使用虛擬主機將它們分開嗎? –

+0

不同的域與使用單獨虛擬主機的不同端口使用同一個域幾乎是一樣的。問題不在於如何設置端口,而是如何設置乘客和導軌,以便爲相同的底層應用程序使用不同的端口。 – jumentous

+0

嗡嗡聲,有趣的是,由於乘客通過虛擬主機與一個應用程序合作,我不確定這是否可行。你可以移動到不同的Web服務器設置,如乘客 - >獨角獸(或者甚至是nginx - >獨角獸)? –

回答

0

在你的Rails應用程序,如果你正在尋找有行爲請求類型有條件,你可以加少許的輔助方法是這樣:

class UserController < ApplicationController 
    def index 
    @users = User.all 
    if api_request? 
     render :json => @users.to_json 
    else 
     render :action => :index 
    end 
    end 
end 
+0

太好了,我以爲會有訪問請求中某處的端口。雖然沒有被接受,但我仍然在尋找人來回答更大的設置問題。 – jumentous

相關問題