=============
Apache+SCGI Apache 前端處理用戶請求,負責靜態頁面
mod_scgi 充當 scgi client, 將http請求中動態部分發給 scgi runner。
=============參考:
http://www.pc51.net/server/web/apache/2006-12-21/334.html關注SCGI,一種更佳的高性能CGI方案
目前,rubyonrails可以采用服務器方案有:
1。 Webrick
2。 Apache(lighttpd) + CGI
3。 Apache+FastCGI
4。 Lighttpd + FastCGI
5。 Apache(lighttpd)+SCGI
其中,Webrick是一個玩具,不支持并發請求,只能作為開發工具進行調試。而CGI方式就直接踢出,在性能上是難以忍受的。 FastCGI雖然性能卓越(據稱是傳統CGI程序的5倍),但是在Apache中非常不穩定,經常會出現500錯誤。相對來說Lighttpd+FastCGI的方案比較穩定,性能也不錯,但lighttpd畢竟不是一個十分流行的http服務器,大部分人都不熟悉此服務,擴展模塊也相對較少,另外似乎還有些bug,沒有apache那么健壯。
在這幾個方案中能夠兼具高性能和高穩定性的莫過于Apache+SCGI方案。SCGI是用來替換傳統CGI的新的CGI協議,以Client/Server的方式實現,具有和FastCGI一樣優秀的性能,同時又在穩定性方面遠遠超過FastCGI, 該方案在Python Web領域應用較多。
一般搭建一個SCGI環境需要準備,Apache,mod_scgi, scgi runner等軟件,其中apache做為前端http服務器處理用戶請求并且負責靜態文件,而mod_scgi是apache的一個擴展模塊,該模塊實現了SCGI協議的client部分,負責將http請求中的動態部分發給SCGI服務器,即SCGI Runner,在rubyonrails社區,已經有人開發了SCGI Rails Runner--SRR,只需要將一個腳本放你的rails程序的script目錄中,運行該腳本就會建立一個SCGI Server,等待并且處理SCGI Client(mod_scgi)轉發的請求。
對SCGI有興趣的朋友,可以查看這些內容:
http://www.mems-exchange.org/software/scgi/
http://www.zedshaw.com/projects/scgi_rails/
另外,由于RubyOnRails特殊的url rewrite機制,官方目前提供的apache配置模板可能會使一些看起來是靜態文件的url無法被rubyonrails處理,如typo里的rss: /xml/rss.xml,不過,rails社區的Kyle等人已經搞出了兩個方案,而SRR的作者也打算采用他們的方案。當然,一般情況下,使用官方的配置模板就已經能夠處理大部分url。對這個問題有興趣的朋友可以在rails的郵件列表中搜索:scgi apache, 最近的幾篇郵件應該有提到。