PHPè¿è¡æ¨¡å¼æ4éï¼
1ï¼cgi éç¨ç½å ³æ¥å£ï¼Common Gateway Interface)ï¼
2ï¼ fast-cgi 常驻 (long-live) åç CGI
3ï¼ cli  å½ä»¤è¡è¿è¡  ï¼Command Line Interfaceï¼
4ï¼web模åæ¨¡å¼ ï¼apacheçwebæå¡å¨è¿è¡ç模å模å¼ï¼
1. Â CGIï¼Common Gateway Interfaceï¼
     CGIå³éç¨ç½å ³æ¥å£(Common Gateway Interface)ï¼å®æ¯ä¸æ®µç¨åº, éä¿ç讲CGI就象æ¯ä¸åº§æ¡¥ï¼æç½é¡µåWEBæå¡å¨ä¸çæ§è¡ç¨åºè¿æ¥èµ·æ¥ï¼å®æHTMLæ¥æ¶çæä»¤ä¼ éç»æå¡å¨çæ§è¡ç¨åºï¼åææå¡å¨æ§è¡ç¨åºçç»æè¿è¿ç»HTML页ãCGI ç跨平å°æ§è½æä½³ï¼å ä¹å¯ä»¥å¨ä»»ä½æä½ç³»ç»ä¸å®ç°ã CGIå·²ç»æ¯æ¯è¾èç模å¼äºï¼è¿å å¹´é½å¾å°ç¨äºã
     æ¯æä¸ä¸ªç¨æ·è¯·æ±ï¼é½ä¼å è¦å建cgiçåè¿ç¨ï¼ç¶åå¤ç请æ±ï¼å¤çå®åç»æè¿ä¸ªåè¿ç¨ï¼è¿å°±æ¯ fork-and-executeæ¨¡å¼ ã å½ç¨æ·è¯·æ±æ°éé常å¤æ¶ï¼ä¼å¤§éæ¤å ç³»ç»çèµæºå¦å åï¼CPUæ¶é´çï¼é ææè½ä½ä¸ãæ以ç¨cgiæ¹å¼çæå¡å¨æå¤å°è¿æ¥è¯·æ±å°±ä¼æå¤å°cgiåè¿ç¨ï¼ åè¿ç¨åå¤å è½½æ¯cgiæ§è½ä½ä¸ç主è¦åå ã
     å¦æä¸æ³æ PHP åµå ¥å°æå¡å¨ç«¯è½¯ä»¶ï¼å¦ Apacheï¼ä½ä¸ºä¸ä¸ªæ¨¡åå®è£ çè¯ï¼å¯ä»¥éæ©ä»¥Â CGI  ç æ¨¡å¼ å®è£ ãæè æ PHP ç¨äºä¸åç CGI å°è£ 以便为代ç å建å®å ¨ç chroot å setuid ç¯å¢ãè¿æ ·æ¯ä¸ªå®¢æ·æºè¯·æ±ä¸ä¸ªphpæ件ï¼Webæå¡å¨å°±è°ç¨php.exeï¼winä¸æ¯php.exe,linuxæ¯phpï¼å»è§£éè¿ä¸ªæ件ï¼ç¶ååæ解éçç»æ以ç½é¡µçå½¢å¼è¿åç»å®¢æ·æºã è¿ç§å®è£ æ¹å¼é常ä¼æ PHP çå¯æ§è¡æ件å®è£ å° web æå¡å¨ç cgi-bin ç®å½ãCERT 建议书 CA-96.11  建议ä¸è¦æä»»ä½ç解éå¨æ¾å° cgi-bin ç®å½ã
     è¿ç§æ¹å¼ç好å¤æ¯æweb serveråå ·ä½çç¨åºå¤çç¬ç«å¼æ¥ï¼ç»ææ¸ æ°ï¼å¯æ§æ§å¼ºï¼åæ¶ç¼ºç¹å°±æ¯å¦æå¨é«è®¿é®éæ±çæ åµä¸ï¼cgiçè¿ç¨forkå°±ä¼æ为å¾å¤§çæå¡å¨è´æ ï¼æ³ 象ä¸ä¸æ°ç¾ä¸ªå¹¶å请æ±å¯¼è´æå¡å¨forkåºæ°ç¾ä¸ªè¿ç¨å°±æç½äºãè¿ä¹æ¯ä¸ºä»ä¹cgiä¸ç´èè´æ§è½ä½ä¸ï¼é«èµæºæ¶èçæ¶åçåå ã
    CGI模å¼å®è£ ï¼
   CGIå·²ç»æ¯æ¯è¾èç模å¼äºï¼è¿å å¹´é½å¾å°ç¨äº,æ以æ们åªæ¯ä¸ºäºæµè¯ã
   å®è£ CGI模å¼éè¦æ³¨éæ
   LoadModule php5_module modules/libphp5.so è¿è¡ãå¦æä¸æ³¨éè¿è¡ä¼ä¸ç´èµ°å°handler模å¼ãä¹å°±æ¯æ¨¡å模å¼ã
   ç¶åå¨httpd.confå¢å actionï¼
   Action application/x-httpd-php /cgi-bin/
   å¦æå¨/cgi-bin/ç®å½æ¾ä¸å°php-cgi.å¯èªè¡ä»phpçbinéé¢cpä¸ä¸ªã
   ç¶åéå¯apache,åæå¼æµè¯é¡µé¢åç°Server APIåæï¼CGI/FastCGIã说ææååæ¢ä¸ºcgi模å¼ã
     é®é¢ï¼
1)  å¦æcgiç¨åºæ¾å¨/usr/local/httpd/cgi-bin/éæ æ³æ§è¡ï¼éå°403æ500é误çè¯
æå¼apacheé误æ¥å¿Â æå¦ä¸æ示ï¼Â Permission denied: exec of
å¯ä»¥æ£æ¥cgiç¨åºçå±æ§ï¼æLinux contextsæ件 éå®ä¹çï¼/usr/local/httpd/cgi-bin/éå¿ é¡»æ¯httpd_sys_script_exec_t å±æ§ã  éè¿ls -Zæ¥çï¼å¦æä¸æ¯åéè¿å¦ä¸å½ä»¤æ´æ¹ï¼Â   chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi   å¦ææ¯èæ主æºéçcgiï¼ååèé®é¢2使ä¹è½æ£å¸¸ä½¿ç¨æ®éçåè½åï¼åéè¿chcon设置cgiæ件çcontext为    Â
httpd_sys_script_exec_tå³å¯ãchcon -R -t httpd_sys_script_exec_t cgi-bin/
2) apacheé误æ示ï¼.... malformed header from script. Bad header=
æ ¹æ®æ示说ææheaderæé®é¢ï¼æ¥çæ件è¾åºç第ä¸å¥è¯æ¯ä»ä¹ï¼åºè¯¥ç±»ä¼¼äºå¦ä¸Â  Â
Content-type: text/plain; charset=iso-8859-1\n\n  Â
æè Content-type:text/html\n\n Â
注æï¼å£°æ好Content-typeåè¦è¾åºä¸¤ä¸ªç©ºè¡ã
3ï¼apacheé误æç¤ºï¼ Exec format error
èæ¬è§£éå¨è®¾ç½®é误ãèæ¬ç¬¬ä¸è¡åºè¯¥ä»¥'#!解éå¨è·¯å¾'çå½¢å¼, 填åèæ¬è§£éå¨çè·¯å¾ï¼å¦ææ¯PERLç¨åºï¼å¸¸è§çè·¯å¾ä¸º:    #!/usr/bin/perl æ #!/usr/local/bin/perl       å¦ææ¯PHPç¨åºï¼ä¸éè¦å¡«å解éå¨è·¯å¾ï¼ç³»ç»ä¼èªå¨æ¾å°PHPã
2.  Fastcgi模å¼
      fast-cgi æ¯cgiçå级çæ¬ï¼FastCGI åæ¯ä¸ä¸ª 常驻 (long-live) åç CGI ï¼å®å¯ä»¥ä¸ç´æ§è¡çï¼åªè¦æ¿æ´»åï¼ä¸ä¼æ¯æ¬¡é½è¦è±è´¹æ¶é´å» fork ä¸æ¬¡ (è¿æ¯ CGI æ为人è¯ç ç fork-and-execute 模å¼)ãÂ
     FastCGIçå·¥ä½åçæ¯ ï¼
(1)ãWeb Serverå¯å¨æ¶è½½å ¥FastCGIè¿ç¨ç®¡çå¨ãPHPçFastCGIè¿ç¨ç®¡çå¨æ¯PHP-FPM(php-FastCGI Process Manager)ãï¼IIS ISAPIæApache Module);
(2)ãFastCGIè¿ç¨ç®¡çå¨èªèº«åå§åï¼å¯å¨å¤ä¸ªCGI解éå¨è¿ç¨ (å¨ä»»å¡ç®¡çå¨ä¸å¯è§å¤ä¸ªphp-cgi.exe)并çå¾ æ¥èªWeb Serverçè¿æ¥ã
(3)ãå½å®¢æ·ç«¯è¯·æ±å°è¾¾Web Serveræ¶ï¼FastCGIè¿ç¨ç®¡çå¨éæ©å¹¶è¿æ¥å°ä¸ä¸ªCGI解éå¨ãWeb serverå°CGIç¯å¢åéåæ åè¾å ¥åéå°FastCGIåè¿ç¨php-cgiã
(4)ãFastCGIåè¿ç¨å®æå¤çåå°æ åè¾åºåé误信æ¯ä»åä¸è¿æ¥è¿åWeb Serverãå½FastCGIåè¿ç¨å ³éè¿æ¥æ¶ï¼è¯·æ±ä¾¿åå¤çå®æãFastCGIåè¿ç¨æ¥ççå¾ å¹¶å¤çæ¥èªFastCGIè¿ç¨ç®¡çå¨ï¼è¿è¡å¨ WebServerä¸ï¼çä¸ä¸ä¸ªè¿æ¥ãå¨æ£å¸¸çCGI模å¼ä¸ï¼php-cgi.exeå¨æ¤ä¾¿éåºäºã
å¨CGI模å¼ä¸ï¼ä½ å¯ä»¥æ³è±¡Â CGIé常æå¤æ ¢ãæ¯ä¸ä¸ªWeb请æ±PHPé½å¿ é¡»éæ°è§£æphp.iniãéæ°è½½å ¥å ¨é¨dllæ©å±å¹¶éåå§åå ¨é¨æ°æ®ç»æã使ç¨FastCGIï¼ææè¿äºé½åªå¨è¿ç¨å¯å¨æ¶åçä¸æ¬¡ãä¸ä¸ªé¢å¤ç好å¤æ¯ï¼æç»æ°æ®åºè¿æ¥(Persistent database connection)å¯ä»¥å·¥ä½ã
Fastcgiçä¼ç¹ï¼
1ï¼ä»ç¨³å®æ§ä¸ç, fastcgiæ¯ä»¥ç¬ç«çè¿ç¨æ± è¿è¡æ¥cgi,åç¬ä¸ä¸ªè¿ç¨æ»æ,ç³»ç»å¯ä»¥å¾è½»æç丢å¼,ç¶åéæ°å é æ°çè¿ç¨æ¥è¿è¡é»è¾.
2ï¼ä»å®å ¨æ§ä¸ç,Fastcgiæ¯æåå¸å¼è¿ç®. fastcgiå宿主çserverå®å ¨ç¬ç«, fastcgiæä¹downä¹ä¸ä¼æserveræå®.
3ï¼ä»æ§è½ä¸ç, fastcgiæå¨æé»è¾çå¤çä»serverä¸å离åºæ¥, 大è´è·çIOå¤çè¿æ¯çç»å®¿ä¸»server, è¿æ ·å®¿ä¸»serverå¯ä»¥ä¸å¿ä¸æä½IO,对äºä¸ä¸ªæ®éçå¨æç½é¡µæ¥è¯´, é»è¾å¤çå¯è½åªæä¸å°é¨å, 大éçå¾ççéæÂ
FastCGI缺ç¹ï¼è¯´å®äºå¥½å¤ï¼ä¹æ¥è¯´è¯´ç¼ºç¹ãä»æçå®é 使ç¨æ¥çï¼ç¨FastCGI模å¼æ´éåç产ç¯å¢çæå¡å¨ãä½å¯¹äºå¼åç¨æºå¨æ¥è¯´å°±ä¸å¤ªåéãå 为å½ä½¿ç¨Â Zend Studioè°è¯ç¨åºæ¶ï¼ç±äºÂ FastCGIä¼è®¤ä¸ºÂ PHPè¿ç¨è¶ æ¶ï¼ä»èå¨é¡µé¢è¿å 500é误ãè¿ä¸ç¹è®©äººé常æ¼ç«ï¼æ以æå¨å¼åæºå¨ä¸è¿æ¯æ¢åäºÂ ISAPI模å¼ã
å®è£ fastcgi模å¼ï¼
å®è£ apacheè·¯å¾æ¯/usr/local/httpd/ å®è£ phpè·¯å¾æ¯/usr/local/php/ 1ï¼å®è£ mod_fastcgi wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz tar zxvf mod_fastcgi-2.4.6.tar.gz cd mod_fastcgi-2.4.6 cp Makefile.AP2 Makefile vi Makefileï¼ç¼è¾top_dir = /usr/local/httpd make make install å®è£ å®åï¼ /usr/local/httpd/modules/å¤åºä¸ä¸ªæ件ï¼
mod_fcgid.so
2ï¼éæ°ç¼è¯php ./configure --prefix=/usr/local/php --enable-fastcgi --enable-force-cgi-redirect --disable-cli make make install è¿æ ·ç¼è¯åï¼å¨PHPçbinç®å½ä¸çphp-cgiå°±æ¯fastcgi模å¼çphp解éå¨äº å®è£ æåå,æ§è¡ php -v è¾åº PHP 5.3.2 (cgi-fcgi). è¿éè¾åºå¸¦äºcgi-fcgi 注æï¼ 1. ç¼è¯åæ°ä¸è½å âwith-apxs=/usr/local/httpd/bin/apxs å¦åå®è£ åºæ¥çphpæ§è¡æ件æ¯cli模å¼ç 2  å¦æç¼è¯æ¶ä¸å --disable-cliåè¾åºÂ PHP 5.3.2(cli)  3)é ç½®apache éè¦é ç½®apacheæ¥ä»¥fastcgi模å¼è¿è¡phpç¨åº vi httpd.conf æ们使ç¨èææºçæ¹å¼å®ç°ï¼
#å è½½fastcgi模å LoadModule fastcgi_module   modules/mod_fastcgi.so #//以éææ¹å¼æ§è¡fastcgi å¯å¨äº10è¿ç¨ FastCgiServer /usr/local/php/bin/php-cgi  -processes 10 -idle-timeout 150 -pass-header HTTP_AUTHORIZATION <VirtualHost *:80>    #    DocumentRoot  /usr/local/httpd/fcgi-bin      ServerName www.fastcgitest.com       ScriptAlias /fcgi-bin/  /usr/local/php/bin/   #å®ä¹ç®å½æ å°Â /fcgi-bin/ 代æ¿Â /usr/local/php/bin/    Options +ExecCGI    AddHandler fastcgi-script .php .fcgi      #.phpç»å°¾ç请æ±é½è¦ç¨php-fastcgiæ¥å¤ç     AddType application/x-httpd-php .php    #å¢å MIMEç±»å    Action application/x-httpd-php /fcgi-bin/php-cgi  #设置php-fastcgiçå¤çå¨ï¼Â /usr/local/php/bin/php-cgi
 <Directory /usr/local/httpd/fcgi-bin/>    Options Indexes ExecCGI    Order allow,deny    allow from all  </Directory> </VirtualHost>
æè <IfModule mod_fastcgi> ScriptAlias /fcgi-bin/ "/usr/local/php/bin" #å®ä¹ç®å½æ å° FastCgiServer /usr/local/php/bin/php-cgi   -processes 10 #é ç½®fastcgi serverï¼ <Directory "/usr/local/httpd/fcgi-bin/"> SetHandler fastcgi-script Options FollowSymLinks Order allow,deny Allow from all </Directory> AddType application/x-httpd-php .php #å¢å MIMEç±»å AddHandler php-fastcgi .php  #.phpç»å°¾ç请æ±é½è¦ç¨php-fastcgiæ¥å¤ç Action php-fastcgi /fcgi-bin/php-cgi #设置php-fastcgiçå¤çå¨
</IfModule>
4ï¼.restart ä¸apache,æ¥çphpinfoï¼å¦ææå¡å¨ä¿¡æ¯æ¯ï¼ Apache/2.2.11 (Unix) mod_fastcgi/2.4.6ä¹ç±»ç就说æå®è£ æåäºã å¦æåºç°403çé误ï¼æ¥çä¸/usr/local/httpd/fcgi-bin/æ¯å¦æ足å¤çæéã æè <Directory />     Options FollowSymLinks     AllowOverride None     Order deny,allow     Deny from all </Directory> æ¹ä¸ºï¼ <Directory />     Options FollowSymLinks     AllowOverride None Order allow,deny Allow from all </Directory> å°±å¯ä»¥äºã ps -ef|grep  php-cgiå¯ä»¥çè§10个fastcgiè¿ç¨å¨è·ã
3.  CLI模å¼
cliæ¯phpçå½ä»¤è¡è¿è¡æ¨¡å¼ï¼å¤§å®¶ç»å¸¸ä¼ä½¿ç¨å®ï¼ä½æ¯å¯è½å¹¶æ²¡æ注æå°ï¼ä¾å¦ï¼æ们å¨linuxä¸ç»å¸¸ä½¿ç¨ "php -m"æ¥æ¾PHPå®è£ äºé£äºæ©å±å°±æ¯PHPå½ä»¤è¡è¿è¡æ¨¡å¼ï¼æå ´è¶£çåå¦å¯ä»¥è¾å ¥php -hå»æ·±å ¥ç 究该è¿è¡æ¨¡å¼ï¼
1.让 PHP è¿è¡æå®æ件ã
php script.php
php -f script.php
以ä¸ä¸¤ç§æ¹æ³ï¼ä½¿ç¨æä¸ä½¿ç¨ -f åæ°ï¼é½è½å¤è¿è¡èæ¬çscript.phpãæ¨å¯ä»¥éæ©ä»»ä½æ件æ¥è¿è¡ï¼æ¨æå®ç PHP èæ¬å¹¶éå¿ é¡»è¦ä»¥ .php 为æ©å±åï¼å®ä»¬å¯ä»¥æä»»æçæ件ååæ©å±åã
2.å¨å½ä»¤è¡ç´æ¥è¿è¡Â PHP 代ç ã
php -r "print_r(get_defined_constants());"
å¨ä½¿ç¨è¿ç§æ¹æ³æ¶ï¼è¯·æ¨æ³¨æå¤å£³åéçæ¿ä»£åå¼å·ç使ç¨ã
注: 请ä»ç»é 读以ä¸èä¾ï¼å¨è¿è¡ä»£ç æ¶æ²¡æå¼å§åç»æçæ 记符ï¼å ä¸ -r åæ°åï¼è¿äºæ 记符æ¯ä¸éè¦çï¼å ä¸å®ä»¬ä¼å¯¼è´è¯æ³é误ã
3.éè¿æ åè¾å ¥ï¼stdinï¼æä¾éè¦è¿è¡ç PHP 代ç ã
以ä¸ç¨æ³ç»æ们æä¾äºé常强大çåè½ï¼ä½¿å¾æ们å¯ä»¥å¦ä¸èä¾æ示ï¼å¨æå°çæ PHP 代ç 并éè¿å½ä»¤è¡è¿è¡è¿äºä»£ç ï¼
$ some_application | some_filter | php | sort -u >final_output.txt
4. 模å模å¼
      模å模å¼æ¯ä»¥mod_php5模åçå½¢å¼éæï¼æ¤æ¶mod_php5模åçä½ç¨æ¯æ¥æ¶Apacheä¼ éè¿æ¥çPHPæ件请æ±ï¼å¹¶å¤çè¿äºè¯·æ±ï¼ç¶åå°å¤çåçç»æè¿åç»Apacheãå¦ææ们å¨Apacheå¯å¨åå¨å ¶é ç½®æ件ä¸é 置好äºPHP模åï¼mod_php5ï¼ï¼ PHP模åéè¿æ³¨åapache2çap_hook_post_configæé©ï¼å¨Apacheå¯å¨çæ¶åå¯å¨æ¤æ¨¡å以æ¥åPHPæ件ç请æ±ã
     é¤äºè¿ç§å¯å¨æ¶çå è½½æ¹å¼ï¼Apacheç模åå¯ä»¥å¨è¿è¡çæ¶åå¨æè£ è½½ï¼è¿æå³ç对æå¡å¨å¯ä»¥è¿è¡åè½æ©å±èä¸éè¦éæ°å¯¹æºä»£ç è¿è¡ç¼è¯ï¼çè³æ ¹æ¬ä¸éè¦åæ¢æå¡å¨ãæ们æéè¦åçä» ä» æ¯ç»æå¡å¨åéä¿¡å·HUPæè AP_SIG_GRACEFULéç¥æå¡å¨éæ°è½½å ¥æ¨¡åãä½æ¯å¨å¨æå è½½ä¹åï¼æ们éè¦å°æ¨¡åç¼è¯æ为å¨æé¾æ¥åºãæ¤æ¶çå¨æå 载就æ¯å è½½å¨æé¾æ¥åºã Apacheä¸å¯¹å¨æé¾æ¥åºçå¤çæ¯éè¿æ¨¡åmod_soæ¥å®æçï¼å æ¤mod_so模åä¸è½è¢«å¨æå è½½ï¼å®åªè½è¢«éæç¼è¯è¿Apacheçæ ¸å¿ãè¿æå³çå®æ¯éçApacheä¸èµ·å¯å¨çã
    Apacheæ¯å¦ä½å 载模åçå¢ï¼æ们以åé¢æå°çmod_php5模å为ä¾ãé¦å æ们éè¦å¨Apacheçé ç½®æ件httpd.confä¸æ·»å ä¸è¡ï¼
该è¿è¡æ¨¡å¼æ¯æ们以åå¨windowsç¯å¢ä¸ä½¿ç¨apacheæå¡å¨ç»å¸¸ä½¿ç¨çï¼èå¨æ¨¡åå(DLL)ä¸ï¼PHPæ¯ä¸Webæå¡å¨ä¸èµ·å¯å¨å¹¶è¿è¡çãï¼æ¯apacheå¨CGIçåºç¡ä¸è¿è¡çä¸ç§æ©å±ï¼å å¿«PHPçè¿è¡æçï¼
è¿éæ们使ç¨äºLoadModuleå½ä»¤ï¼è¯¥å½ä»¤ç第ä¸ä¸ªåæ°æ¯æ¨¡åçå称ï¼å称å¯ä»¥å¨æ¨¡åå®ç°çæºç ä¸æ¾å°ã第äºä¸ªé项æ¯è¯¥æ¨¡åæå¤çè·¯å¾ãå¦æéè¦å¨æå¡å¨è¿è¡æ¶å 载模åï¼å¯ä»¥éè¿åéä¿¡å·HUPæè AP_SIG_GRACEFULç»æå¡å¨ï¼ä¸æ¦æ¥åå°è¯¥ä¿¡å·ï¼Apacheå°éæ°è£ 载模åï¼èä¸éè¦éæ°å¯å¨æå¡å¨ãLoadModule php5_module modules/mod_php5.so
6.  phpå¨Nginxä¸è¿è¡æ¨¡å¼ï¼Nginx+ PHP-FPMï¼
使ç¨FastCGIæ¹å¼ç°å¨å¸¸è§çæ两ç§stackï¼ligthttpd+spawn-fcgi;å¦å¤ä¸ç§æ¯nginx+PHP-FPM(ä¹å¯ä»¥ç¨spawn-fcgi)ã
Aãå¦ä¸é¢æ说该两ç§ç»æé½éç¨FastCGI对PHPæ¯æï¼å æ¤HTTPServerå®å ¨è§£æ¾åºæ¥ï¼å¯ä»¥æ´å¥½å°è¿è¡ååºå并åå¤çãå æ¤lighttpdånginxé½æsmall, but powerfulåefficientçç¾èªã
Bã该两è è¿å¯ä»¥ååºä¸ä¸ªå¥½åæ¥ï¼spawn-fcgiç±äºæ¯lighttpdçä¸é¨åï¼å æ¤å®è£ äºlighttpdä¸è¬å°±ä¼ä½¿ç¨spawn-fcgi对phpæ¯æï¼ä½æ¯ç®åæç¨æ·è¯´ligttpdçspwan-fcgiå¨é«å¹¶å访é®çæ¶åï¼ä¼åºç°ä¸é¢è¯´çå åæ³æ¼çè³èªå¨éå¯fastcgiãå³ï¼PHPèæ¬å¤çå¨å½æºï¼è¿ä¸ªæ¶åå¦æç¨æ·è®¿é®çè¯ï¼å¯è½å°±ä¼åºç°ç½é¡µ(å³PHPä¸è½è¢«è§£ææè åºé)ã
å¦ä¸ä¸ªï¼é¦å nginxä¸ålighttpdæ¬èº«å«å¸¦äºfastcgi(spawn-fcgi)ï¼å æ¤å®å®å ¨æ¯è½»é级çï¼å¿ é¡»åå©ç¬¬ä¸æ¹çFastCGIå¤çå¨æå¯ä»¥å¯¹PHPè¿è¡è§£æï¼å æ¤å ¶å®è¿æ ·çæ¥nginxæ¯é常çµæ´»çï¼å®å¯ä»¥åä»»ä½ç¬¬ä¸æ¹æä¾è§£æçå¤çå¨å®ç°è¿æ¥ä»èå®ç°å¯¹PHPç解æ(å¨nginx.confä¸å¾å®¹æ设置)ãnginxå¯ä»¥ä½¿ç¨spwan-fcgi(éè¦ä¸åå®è£ lighttpdï¼ä½æ¯éè¦ä¸ºnginxé¿å¼ç«¯å£ï¼ä¸äºè¾æ©çblogæè¿æ¹é¢å®è£ çæç¨)ï¼ä½æ¯ç±äºspawn-fcgiå ·æä¸é¢æè¿°çç¨æ·éæ¸åç°ç缺é·ï¼ç°å¨æ ¢æ ¢åå°ä½¿ç¨nginx+spawn-fcgiç»åäºã
Cãç±äºspawn-fcgiç缺é·ï¼ç°å¨åºç°äºæ°ç第ä¸æ¹(ç®åè¿æ¯ï¼å¬è¯´æ£å¨åªåä¸ä¹ å°æ¥å å ¥å°PHP coreä¸)çPHPçFastCGIå¤çå¨ï¼å«åPHP-FPM(å ·ä½å¯ä»¥google)ãå®åspawn-fcgiæ¯è¾èµ·æ¥æå¦ä¸ä¼ç¹ï¼
ç±äºå®æ¯ä½ä¸ºPHPçpatchè¡¥ä¸æ¥å¼åçï¼å®è£ çæ¶åéè¦åphpæºç ä¸èµ·ç¼è¯ï¼ä¹å°±æ¯è¯´ç¼è¯å°php coreä¸äºï¼å æ¤å¨æ§è½æ¹é¢è¦ä¼ç§ä¸äºï¼
åæ¶å®å¨å¤çé«å¹¶åæ¹é¢ä¹ä¼äºspawn-fcgiï¼è³å°ä¸ä¼èªå¨éå¯fastcgiå¤çå¨ãå ·ä½éç¨çç®æ³å设计å¯ä»¥googleäºè§£ã
å æ¤ï¼å¦ä¸æ说ç±äºnginxçè½»éåçµæ´»æ§ï¼å æ¤ç®åæ§è½ä¼è¶ï¼è¶æ¥è¶å¤äººéæ¸ä½¿ç¨è¿ä¸ªç»åï¼nginx+PHP/PHP-FPM
6.  æ»ç»
ç®åå¨
HTTPServer è¿ååºæ¬å¯ä»¥çå°æä¸ç§ stack æ¯è¾æµè¡ï¼
ï¼1ï¼Apache+mod_php5
ï¼2ï¼lighttp+spawn-fcgi
ï¼3ï¼nginx+PHP-FPM
ä¸è å两è æ§è½å¯è½ç¨ä¼ï¼ä½æ¯ Apacheç±äºæ丰å¯ç模åååè½ï¼ç®åæ¥è¯´ä»æ§æ¯è大ãæ人æµè¯nginx+PHP-FPMå¨é«å¹¶åæ åµä¸å¯è½ä¼è¾¾å° Apache+mod_php5ç5~10åï¼ç°å¨nginx+PHP-FPM使ç¨ç人è¶æ¥è¶å¤ã