2014-04-16 26 views
2

我們有一個perl web應用程序,它一直使用普通的CGI,現在我們試圖用其他的東西(mod_perl,fastcgi,whathaveyou)移植到Dancer 2上,這樣我們可以獲得更多的性能。如何通過Apache(不使用普通CGI)在多個部署設置中使用Dancer 2進行控制?

這裏是我們現在有正確的Apache的設置(我知道接龍是一個極力推薦,但我們想堅持到Apache作爲我們的Web服務器)

<VirtualHost *> 
... 
     <Directory "/opt/alDente/versions/DanceApp/public"> 
       AllowOverride None 
       Options +ExecCGI -MultiViews FollowSymLinks 
       Order allow,deny 
       Allow from all 
       AddHandler cgi-script .cgi 
     </Directory> 

     ScriptAliasMatch /dance/(.*) /opt/alDente/versions/DanceApp/public/dispatch.cgi/$1 
     ProxyPreserveHost On 
     ProxyPass /test http://localhost:3000/ 
     ProxyPassReverse /test http://localhost:3000/ 
     ... 

部署舞者2的普通的CGI方法(如上所示)工作完全正常,即使在同一服務器下進行多個部署。問題:這樣做會使我們的性能提升

我也試過使用默認的舞者2自帶的簡單的web服務器,讓Apache指向它(如上所述)。它使我們獲得了巨大的性能提升,設置簡單易行。問題:我們無法通過此設置獲得多個部署,這對我們來說絕對是必須的。除非我將/test更改爲/(即使我開啓了ProxyPreserveHost),但內部URL 會與代理搞砸,但由於顯而易見的原因,這種情況不適用於多個部署。

我也花了整整一天昨天試圖讓mod_perl使用這個設置,但我讀過mod_perl也無法處理同一臺服務器上的多個部署,並無法讓它正常工作。

我也試着用fastcgi設置它(使用dispatch.fcgi而不是dispatch.cgi,dancer 2自帶),但是這似乎沒有提供任何性能提升。

我能做些什麼來解決這個問題?使用Apache並且擁有能夠在同一臺服務器上處理多個部署的事情(由於預算問題,我們的服務器將不得不託管生產,測試版和Alpha環境)對我們來說是必備

回答

0

使用mod_proxy完全可以在單個Apache接口後面實現多個部署。

每個應用程序的設置都需要更新才能使用唯一的端口。例如,端口3000,4000和5000的

之後,您使用的mod_proxy類似於下面的東西:

<VirtualHost *:80> 
ProxyPass/http://localhost:5000/ retry=0 Keepalive=on 
ProxyPassReverse/http://localhost:5000/ 
ProxyPreserveHost On 
ServerName XXXXXXXXXXXXXXXXXXX 
TimeOut 300 
</VirtualHost> 

通過將其綁定設置服務器名,你到一個特定子域。

您可以使用一個Location指令,而不是如果你想給它的所有綁定到不同的URL:

<Location /production> 
ProxyPass/http://localhost:5000/ retry=0 Keepalive=on 
ProxyPassReverse/http://localhost:5000/ 
ProxyPreserveHost On 
ServerName XXXXXXXXXXXXXXXXXXX 
TimeOut 300 
</Location> 

但是,如果你要做到這一點,普拉克支持在App.psgi水平做這個,如https://metacpan.org/pod/Dancer::Deployment#In-case-you-have-issues-with-Template::Toolkit-on-Dotcloud所述(忽略頭和讀取,它是相關的)。

相關問題