Linux 下PHP環境搭建php
安裝環境:PHP+lghttpd + postgresqlhtml
1:yum install lighttpd node
紅旗自帶apache2做爲默認的web服務器。在原來的系統中就是使用apache做爲web頁面的服務器,apache佔用的內存不少,一個apache進程佔用的內存大約是20M,最大的可能佔到35M以上,佔用的共享內存都在100多M以上。並且apache是一個多進程響應服務,這樣apache的進程佔用內存更多。所以經長時間運行,會出現因爲內存不夠而沒法訪問界面的狀況。mysql
lighttpd是一個理想的替代方案。其是一個很是輕便的web服務器,雖然它的功能沒有apache強大,可是能夠知足大部分的服務要求。它的內存佔用量通常是2M左右,佔用的共享內存是20M左右,並且與apache實現機制不一樣的是,lighttpd採用單進程多路複用的方式響應請求,在系統中通常只有一個lighttpd進程響應服務請求。(也可配置爲多進程)因此從內存佔用量的角度看,lighttpd就有很大的優點。此外,lighttpd也能夠經過配置fast-cgi支持php應用。nginx
參照:http://blogold.chinaunix.net/u3/109488/showart_2142285.htmlweb
2:yum install fcgi lighttpd-fastcgisql
什麼是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI數據庫
(http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/)apache
CGI全稱是「公共網關接口」(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網絡服務器上。瀏覽器
CGI能夠用任何一種語言編寫,只要這種語言具備標準輸入、輸出和環境變量。如php,perl,tcl等
什麼是FastCGI
FastCGI像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork一次(這是CGI最爲人詬病的fork-and-execute 模式)。它還支持分佈式的運算, 即 FastCGI 程序能夠在網站服務器之外的主機上執行而且接受來自其它網站服務器來的請求。
FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行爲是將CGI解釋器進程保持在內存中並所以得到較高的性能。衆所周知,CGI解釋器的反覆加載是CGI性能低下的主要緣由,若是CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則能夠提供良好的性能、伸縮性、Fail- Over特性等等。
FastCGI與CGI特色
一、如CGI,FastCGI也具備語言無關性.
二、如CGI, FastCGI在進程中的應用程序,獨立於核心web服務器運行,提供了一個比API更安全的環境。(APIs把應用程序的代碼與核心的web服務器連接在一塊兒,這意味着在一個錯誤的API的應用程序可能會損壞其餘應用程序或核心服務器; 惡意的API的應用程序代碼甚至能夠竊取另外一個應用程序或核心服務器的密鑰。)
三、FastCGI技術目前支持語言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相關模塊在Apache, ISS, Lighttpd等流行的服務器上也是可用的。
四、如CGI,FastCGI的不依賴於任何Web服務器的內部架構,所以即便服務器技術的變化, FastCGI依然穩定不變。
FastCGI的工做原理
一、Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
二、FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的鏈接。
三、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
四、FastCGI子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。當FastCGI子進程關閉鏈接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個鏈接。 在CGI模式中,php-cgi在此便退出了。
在上述狀況中,你能夠想象CGI一般有多慢。每個Web請求PHP都必須從新解析php.ini、從新載入所有擴展並重初始化所有數據結構。使用FastCGI,全部這些都只在進程啓動時發生一次。一個額外的好處是,持續數據庫鏈接(Persistent database connection)能夠工做。
FastCGI的不足
由於是多進程,因此比CGI多線程消耗更多的服務器內存,PHP-CGI解釋器每進程消耗7至25兆內存,將這個數字乘以50或100就是很大的內存數。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服務器在3萬併發鏈接下,開啓的10個Nginx進程消耗150M內存(15M*10=150M),開啓的64個php-cgi進程消耗1280M內存(20M*64=1280M),加上系統自身消耗的內存,總共消耗不到2GB內存。若是服務器內存較小,徹底能夠只開啓25個php-cgi進程,這樣php-cgi消耗的總內存數才500M。
上面的數據摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建賽過Apache十倍的Web服務器(第6版)
什麼是PHP-CGI
PHP-CGI是PHP自帶的FastCGI管理器。
啓動PHP-CGI,使用以下命令:php-cgi -b 127.0.0.1:9000
PHP-CGI的不足
一、php-cgi變動php.ini配置後需重啓php-cgi才能讓新的php-ini生效,不能夠平滑重啓
二、直接殺死php-cgi進程,php就不能運行了。(PHP-FPM和Spawn-FCGI就沒有這個問題,守護進程會平滑重新生成新的子進程。)
什麼是PHP-FPM
PHP-FPM是一個PHP FastCGI管理器,是隻用於PHP的,能夠在 http://php-fpm.org/download下載獲得.
PHP-FPM實際上是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP後纔可使用。
如今咱們能夠在最新的PHP 5.3.2的源碼樹裏下載獲得直接整合了PHP-FPM的分支,聽說下個版本會融合進PHP的主分支去。相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,並且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經集成php-fpm了,再也不是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,能夠有效控制內存和進程、能夠平滑重載PHP配置,比spawn-fcgi具備更多有點,因此被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數便可開啓PHP-FPM。
使用PHP-FPM來控制PHP-CGI的FastCGI進
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 啓動php的fastcgi進程
--stop 強制終止php的fastcgi進程
--quit 平滑終止php的fastcgi進程
--restart 重啓php的fastcgi進程
--reload 從新平滑加載php的php.ini
--logrotate 從新啓用log文件
什麼是Spawn-FCGI
Spawn-FCGI是一個通用的FastCGI管理服務器,它是lighttpd中的一部份,不少人都用Lighttpd的Spawn-FCGI進行FastCGI模式下的管理工做,不過有很多缺點。而PHP-FPM的出現多少緩解了一些問題,但PHP-FPM有個缺點就是要從新編譯,這對於一些已經運行的環境可能有不小的風險(refer),在php 5.3.3中能夠直接使用PHP-FPM了。
Spawn-FCGI目前已經獨成爲一個項目,更加穩定一些,也給不少Web 站點的配置帶來便利。已經有很多站點將它與nginx搭配來解決動態網頁。
最新的lighttpd也沒有包含這一塊了(http://www.lighttpd.net/search?q=Spawn-FCGI), 但能夠在之前版本中找到它。在lighttpd-1.4.15版本中就包含了(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)
目前Spawn-FCGI的下載地址是http://redmine.lighttpd.net/projects/spawn-fcgi,最新版本是http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
注:最新的Spawn-FCGI能夠到lighttpd.net網站搜索「Spawn-FCGI」找到它的最新版本發佈地址
下面咱們就可使用Spawn-FCGI來控制php-CGI的FastCGI進程了
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI
參數含義以下:
-f 指定調用FastCGI的進程的執行程序位置,根據系統上所裝的PHP的狀況具體設置
-a 綁定到地址addr
-p 綁定到端口port
-s 綁定到unix socket的路徑path
-C 指定產生的FastCGI的進程數,默認爲5(僅用於PHP)
-P 指定產生的進程的PID文件路徑
-u和-g FastCGI使用什麼身份(-u 用戶 -g 用戶組)運行,Ubuntu下可使用www-data,其餘的根據狀況配置,如nobody、apache等
PHP-FPM與spawn-CGI對比測試
PHP-FPM的使用很是方便,配置都是在PHP-FPM.ini的文件內,而啓動、重啓均可以從php/sbin/PHP-FPM中進行。更方便的是修改php.ini後能夠直接使用PHP-FPM reload進行加載,無需殺掉進程就能夠完成php.ini的修改加載結果顯示使用PHP-FPM可使php有不小的性能提高。PHP-FPM控制的進程cpu回收的速度比較慢,內存分配的很均勻。
Spawn-FCGI控制的進程CPU降低的很快,而內存分配的比較不均勻。有不少進程彷佛未分配到,而另一些卻佔用很高。多是因爲進程任務分配的不均勻致使的.而這也致使了整體響應速度的降低。而PHP-FPM合理的分配,致使整體響應的提到以及任務的平均。
PHP-FPM與Spawn-FCGI功能比較
http://php-fpm.org/about/
PHP-FPM、Spawn-FCGI都是守護php-cgi的進程管理器。
參考文檔:
http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html
http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e-9942-21faeb008cd7.html
http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn-fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/
#yum install mysql mysql-server
#yum install php
#yum install postgresql
#yum install phpmyadmin phppgadmin pgadmin3
安裝完畢
簡單配置
lighttpd、mysql的中止啓動命令(root身份執行)
#/etc/init.d/linghttpd start
#/etc/init.d/mysqld start
自動啓動的設置
#chkconfig --level 345 mysqld on
#chkconfig --level 345 lighttpd on
配置lighttpd
#vi /usr/local/lighttpd/etc/lighttpd.conf
修改一下內容
---------------- 加載cgi,fastcgi模塊-------------
14 server.modules = (
15 "mod_rewrite",
16 # "mod_redirect",
17 # "mod_alias",
18 "mod_access",
19 # "mod_cml",
20 # "mod_trigger_b4_dl",
21 # "mod_auth",
22 # "mod_status",
23 # "mod_setenv",
24 "mod_fastcgi",
25 # "mod_proxy",
26 # "mod_simple_vhost",
27 # "mod_evhost",
28 # "mod_userdir",
29 "mod_cgi",
30 # "mod_compress",
31 # "mod_ssi",
32 # "mod_usertrack",
----------------------------網站根目錄---------------------------------
38 ## a static document-root, for virtual-hosting take look at the
39 ## server.virtual-* options
40 server.document-root = "/var/www/lighttpd/"
----------------------------日誌目錄------------------------------
42 ## where to send error-messages to
43 server.errorlog ="/var/log/lighttpd/error.log"
.....
.....
115 #### accesslog module
116 accesslog.filename = "/var/log/lighttpd/access.log"
-----------------------------默認首頁格式-------------------------
45 # files to check for if .../ is requested
46 index-file.names = ( "index.php", "index.html",
47 "index.htm", "default.htm" )
-----------------------------FastCgi模塊---------------------------
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server = ( ".php" =>
( "localhost" =>
(
"socket"=> /var/run/lighttpd/php-fastcgi.socket",
"bin-path" => "/usr/bin/php-cgi"
)
)
)
------------------------------CGI模塊----------------------------------
#### CGI module
cgi.assign = (
".sh" => "/bin/bash",
".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl"
)
5 修改php.ini
設置 cgi.fix_pathinfo = 1
6 配置完畢,重起lighttpd
# /etc/init.d/lighttpd restart
測試
index.php 內容
# cat /var/www/lighttpd/test.php
phpinfo();
echo "\ndajia hao \n";
echo "同窗們 ,有人炒鹽了,十塊錢一袋\n";
?>
test.html
# cat /var/www/lighttpd/index.php
.....
............
ximo sias web started
###添加的
西默實驗室的同窗們,咱們的web服務器啓動了
###添加的
.................
在瀏覽器中分別輸入 http://localhost、http://localhost/test.php,查看輸出效果。