Windows 下 Apache 1.3 以 FastCGI 模式運行 PHP[轉載]

我一直以來都是以 ISAPI 模式運行 PHP 的,這種方式最大的缺點就是穩定性不好,當 PHP 出錯的時候,Apache進程也死掉了。後來看到網上關於 PHP 以 FastCGI 模式運行的介紹,其中提到的種種好處(穩定、安全、高性能)讓我決定嘗試一下。
不過事情遠不如預計的那麼順利。Google 了無數次也沒找到一篇如何在 Windows 下用 Apache + FastCGI 跑 PHP 的資料,IIS + FastCGI 跑 PHP 的倒是不少。其中有一篇提到 Zend 公司也推薦以 FastCGI 模式運行 PHP([url]http://phplens.com/phpeverywhere/fastcgi-php[/url])。
經過幾個小時的摸索,終於成功實現了 Apache 1.3 + FastCGI 跑 PHP。
準備工作:
首先訪問 [url]http://www.fastcgi.com/dist/[/url]  下載用於 Apache 的 mod_fastcgi。我使用的是 mod_fastcgi-2.4.2-AP13.dll。下載後將這個文件複製到 Apache 的 modules 目錄中。
下載 PHP(我使用的 PHP-5.0.4),並解壓縮,根據需要修改 php.ini 文件。注意不需要從 PHP 所在目錄複製任何文件到 Windows 目錄中。
修改配置:
然後修改 httpd.conf 文件,加入下面幾行:
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
# 說明:此處的 -processes 3 表示啓動三個 php-cgi.exe 進程,
# 關於 FastCgiServer 的詳細參數請參考 FastCGI 文檔。

AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# 說明:根據你的 PHP 文件所在位置修改上面兩處黑體字。
修改完成後,重新啓動 Apache 即可。
常見問題:
根據我的多次試驗,最容易出現的幾個問題主要都是由路徑引起的。因此首先檢查 php.ini 和 httpd.conf 文件中的所有路徑是否正確。其次就是如果系統中以前安裝過 PHP,那麼要將 C:\Windows\php.ini 改名或刪除。
其次還要檢查 PHP 文件所在目錄是否有足夠的權限(我都是設置爲 Everyone - 完全控制,反正開發用機不用考慮那麼多安全限制)。
FastCGI 模式運行 PHP 的優點:
以 FastCGI 模式運行 PHP 有幾個主要的好處。首先就是 PHP 出錯的時候不會搞垮 Apache,只是 PHP 自己的進程當掉(但 FastCGI 會立即重新啓動一個新 PHP 進程來代替當掉的進程)。其次 FastCGI 模式運行 PHP 比 ISAPI 模式性能更好(我本來用 ApacheBench 進行了測試,但忘了保存結果,大家有興趣可以自己測試)。
最後,就是可以同時運行 PHP5 和 PHP4。參考下面的配置文件,分別建立了兩個虛擬主機,其中一個使用 PHP5,另一個使用 PHP4。
LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -processes 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot d:/www
    Options Indexes FollowSymlinks MultiViews
    ServerName php5.localhost
    AddType application/x-httpd-fastphp5 .php
    Action application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
    <Directory "D:/www">
        IndexOptions FancyIndexing FoldersFirst
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
Listen 8080
NameVirtualHost *:8080
<VirtualHost *:8080>
    DocumentRoot d:/www
    Options Indexes FollowSymlinks MultiViews
    ServerName php4.localhost
    AddType application/x-httpd-fastphp4 .php
    Action application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
    <Directory "D:/www">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
使用上面的配置,訪問 [url]http://localhost/[/url] 就使用 PHP5,而訪問 [url]http://localhost:8080/[/url] 就使用 PHP4。所以只要合理配置,就可以讓不同的虛擬主機使用不同版本的 PHP。
FastCGI 模式的一些缺點:
說完了好處,也來說說缺點。從我的實際使用來看,用 FastCGI 模式更適合生產環境的服務器。但對於開發用機器來說就不太合適。因爲當使用 Zend Studio 調試程序時,由於 FastCGI 會認爲 PHP 進程超時,從而在頁面返回 500 錯誤。這一點讓人非常惱火,所以我在開發機器上還是換回了 ISAPI 模式。
最後,在 Windows 中以 FastCGI 模式存在潛在的安全漏洞。因爲我還沒有找到如何在 Windows 環境下實現 SuEXEC 的方法,因此 PHP 的進程總是以最高權限運行,這從安全角度來看顯然不是個好消息。
結束語:
本文對 FastCGI 的運用還停留在很初級的階段,僅當作拋磚引玉,希望有更成熟的解決方案出現。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章