Windows里配置Apache2.2+PHP5.3+mod_fcgid運行高效的FastCGI模式


日發現win平台的Apache也可以跑FastCGI模式了,就折騰了一會。FastCGI模式是經實踐證明了比傳統的模塊模式運行效率高很多。記錄如下:

一、mod_fcgid配置說明

1、首先下載mod_fcgid-2.3.6-win32-x86.zipLinux版本的也有:http://httpd.apache.org/download.cgi#mod_fcgid 將解壓的相關文件復制到apache的“modules”目錄下。

2、打開apache的配置文件“httpd.conf”,文件最后加入如下配置:

LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
#php.ini的存放目錄
FcgidInitialEnv PHPRC “D:/Server/PHP/php-5.3.6-nts”
# 設置PHP_FCGI_MAX_REQUESTS大於或等於FcgidMaxRequestsPerProcess,防止php-cgi進程在處理完所有請求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每個進程的最大請求數
FcgidMaxRequestsPerProcess 1000
#php-cgi最大的進程數
FcgidMaxProcesses 3
#最大執行時間
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi的路徑
FcgidWrapper “D:/Server/PHP/php-5.3.6-nts/php-cgi.exe” .php
AddType application/x-httpd-php .php

3、告訴APACHE執行方式。修改你的配置如下:(vhosts.conf)

<Directory “D:/Web”>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

也可以:

<VirtualHost *:80>
    DocumentRoot "D:\PHPstudy\PHPTutorial\WWW\vhosts\test.8g.com"
    ServerName test.8g.com
    ServerAlias test.8g.com
  <Directory "D:\PHPstudy\PHPTutorial\WWW\vhosts\test.8g.com">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
     Require all granted
  </Directory>
</VirtualHost>

4、重啟apache。

5、如果配置沒錯的話,你運行phpinfo.php可以看到有如下的輸出信息:

Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o mod_fcgid/2.3.6

 

 

 

 

二、mod_fcgid概念說明以及mod_fastcgi和mod_fcgid的區別

mod_fcgid是一個跟mod_fastcgi二進制兼容的Apache module。

原來的mod_fastcgi因為實現方式的限制,所以可能會創建了很多不必要的進程,而實際上只需要更少的進程就能處理同樣的請求。 mod_fastcgi的另外一個問題是每一個CGI的多個進程都共享同一個管道文件,所有到同一個fastcgi的通訊都通過這個同名的管道文件進行, 這樣當出現通訊錯誤的時候,根本不知道正在通訊的是哪一個fastcgi,於是也沒有辦法將這個有問題的進程殺死。

mod_fcgid嘗試使用共享內存來解決這個問題。共享內存里面有當前每個fastcgi進程的信息(包括進程號,進程使用的管道文件名等),當 每次嘗試請求fastcgi工作的時候,Apache將會首先在共享內存里面查詢,只有在共享內存里面發現確實沒有足夠的fastcgi進程了,才會創建 新的進程,這樣可以保證當前創建的進程數量剛好能夠處理客戶的請求。另外,由於每一個fastcgi進程使用不同名稱的管道文件,所以可以在通訊失敗的時 候知道到底哪個fastcgi進程有問題,而能夠盡早的將其剔除。

三、mod_fcgid程序實現的目標

1、跟mod_fastcgi二進制兼容

只要在Apache中用mod_fcgid替換了mod_fastcgi,就能工作。原來的fastcgi程序不用重新編譯,立即可以工作。

2、更嚴格的控制進程的創建

Apache中每一個request handler都能通過共享內存知道當前系統fastcgi運行的情況,這樣可以防止過度的創建fastcgi進程,無謂的消耗系統的資源。

3、簡單清晰的進程創建速度控制策略

每一個fastcgi都會維護一個計數器,這個計數器在程序創建和程序結束的時候都會增加,而這個計數器每秒會減1,直到0。當計數器的值高於某個閥值的時候,程序就會停止創建,直到計數器的值回落。這樣既可以保證在請求突然增多的時候能夠快速反應(特別是Apache剛啟動,需要大量創建程序的時 候),也能保證當fastcgi程序有問題,不斷重起的時候,重起的速度不會過高而消耗過多的系統資源。

4、自動檢測出有問題的進程

因為每個fastcgi使用自己特定的管道文件,所以在通訊錯誤的時候可以輕易知道哪一個程序出現問題,而盡早的將其剔除。

5、可移植性

遵照Apache2的習慣,所有可移植的代碼都放到一起,所有不可移植的代碼都在arch目錄下分開存放。當前已經測試過的系統包括 Linux , FreeBSD(已經包含入FreeBSD4和FreeBSD5的port中), Solaris, Windows 2000.

6、支持FastCGI方式運行的PHP

可以直接支持以FastCGI方式運行的PHP。因為PHP現在還不能保證所有的擴展代碼都是線程安全的,所以並不建議在Apache2的線程模式 下使用mod_php。而以FastCGI方式運行的PHP則是其中一個解決辦法。另外,使用mod_fcgi還可以在不修改任何PHP代碼的情況下,獲得數據庫連接池的功能,大大減少PHP進程到數據庫的連接。

 

轉: http://www.ha97.com/3977.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM