我閱讀了很多關於在 linux 下使用 fastcgi 設定 apache 的論壇貼文、教學等。我正在嘗試為我的一些 ruby 開發(而不是 Rails)運行 fcgi,但我認為它應該適用於任何語言。請注意,我的網路盒子上已經安裝了 apache、fastcgi、ruby-fcgi 等。
從概念上講,我很難適應它。 apache 是否會根據需要產生指定的 fcgi 進程?我要和 apache 一起啟動它們嗎?基本上,我試圖達到能夠提出正確問題的地步,所以如果標題有誤導性,我深表歉意。
答案1
好吧,同時,我想出了這個辦法。由於沒有關於這個主題的簡明文章,這裡是一篇文章的開頭。當我解決了所有錯誤後,我會將其提交到一些教程網站。
確保安裝了基本的 fastcgi apache 模組。如果你像我一樣使用 ArchLinux,aur 上的 mod_fcgid作品。在其他發行版中,安裝 mod_fcgid 或 mod_fastcgi。 (對於那些想知道差異的人,我認為差異不大,所以我選擇了活動更多的那個。)
在 httpd.conf 檔案中,透過在 LoadModule 定義的開頭添加一行來啟動該模組。不確定哪個發行版是否重要,但在 Arch 上確實如此
Loadmodule fcgid_module modules/mod_fcgid.so
在您的 httpd.conf 中新增一個新部分。我把它放在 cgid_module 部分下,但我很確定位置是任意的。
<IfModule fcgid_module> AddHandler fcgid-script .fgci </IfModule>
現在,根據我的理解,標記為 ExecCGI 的目錄中任何具有 .fcgi 副檔名的檔案現在都將由已安裝的 fastcgi 模組處理。我安裝了這為 Ruby 提供 fastcgi 綁定的套件,在 ExecCGI 目錄內,我編寫了這個測試腳本
test.rb.fcgi
#!/usr/bin/ruby -w require 'fcgi' count = 0 FCGI.each_cgi do puts "Content-type: text/html\n\n" puts "Hello, Ruby! FastCGI(#{count})" count = count + 1 end
現在,當您在瀏覽器中轉到該頁面時,由於count
位於 fastcgi 循環之外,因此它應該會隨著每個頁面視圖而增加。如果是這樣,則 fcgi 設定正確。
答案2
你應該考慮使用乘客處理您的 Rails 應用程式(即使您沒有使用 ActiveRecord 等任何 Rails 功能)。有很多網站在上面運行(加上它們有 Rails Enterprise,內存更少,性能更好)
答案3
Apache 應該使用 fastcgi 介面產生它們。然而,這將使它們運行一段時間,並且每個進程在被 Apache 終止之前預計會處理多個請求。
答案4
apache 是否會根據需要產生指定的 fcgi 進程?我要和 apache 一起啟動它們嗎?
Apache 將為您產生它們。您可以在 httpd.conf 中設定要產生的進程的最小和最大數量,它將根據傳入請求的數量產生新進程並殺死過時的進程。只要有請求進來,您的流程就會繼續運作。