Apache與Nginx的優缺點比較
nginx相對于(yu)apache來說,輕量(liang)級,同樣起web服務就比apache占用更少的內存及資源(yuan)抗并發(fa),nginx處理(li)請求是異(yi)步非阻(zu)塞(sai)的,而apache則是阻塞型(xing)的,在高并發(fa)下nginx能保持低資源低消耗高性能,高度模(mo)塊化(hua)的設計,編寫(xie)模(mo)塊相對(dui)簡單,社(she)區活躍(yue),各種高性能模(mo)塊出品迅速;apache相對(dui)于nginx來說,rewrite比nginx的(de)rewrite強大,模塊(kuai)超多,基本想(xiang)到(dao)的(de)都可以找到(dao)少(shao)bug ,nginx的bug相(xiang)對較多。
存在(zai)就是(shi)(shi)(shi)理由(you),一(yi)般來(lai)說,需(xu)要(yao)(yao)性(xing)(xing)能的(de)(de)(de)(de)web服(fu)務就用nginx,如(ru)(ru)果(guo)不需(xu)要(yao)(yao)性(xing)(xing)能只(zhi)求穩定,那(nei)就apache吧(ba)。后者的(de)(de)(de)(de)各種功能模(mo)塊(kuai)(kuai)實現得比(bi)前者,例如(ru)(ru)ssl的(de)(de)(de)(de)模(mo)塊(kuai)(kuai)就比(bi)前者好,可(ke)配置(zhi)項多。這里(li)要(yao)(yao)注(zhu)意一(yi)點,epoll(freebsd上(shang)是(shi)(shi)(shi)kqueue)網絡(luo)IO模(mo)型是(shi)(shi)(shi)nginx處理性(xing)(xing)能高的(de)(de)(de)(de)根(gen)本(ben)理由(you),但(dan)并不是(shi)(shi)(shi)所有(you)的(de)(de)(de)(de)情(qing)況下都是(shi)(shi)(shi)epoll大獲全(quan)勝的(de)(de)(de)(de),如(ru)(ru)果(guo)本(ben)身提供靜態(tai)服(fu)務的(de)(de)(de)(de)就只(zhi)有(you)寥(liao)寥(liao)幾個文件(jian),apache的(de)(de)(de)(de)select模(mo)型或許比(bi)epoll更高性(xing)(xing)能。當(dang)然(ran),這只(zhi)是(shi)(shi)(shi)根(gen)據網絡(luo)IO模(mo)型的(de)(de)(de)(de)原(yuan)理作的(de)(de)(de)(de)一(yi)個假設,真正的(de)(de)(de)(de)應用還是(shi)(shi)(shi)需(xu)要(yao)(yao)實測了再說的(de)(de)(de)(de)。
相比 Apache,Nginx使用更少(shao)的(de)(de)資源(yuan),支(zhi)(zhi)持更多的(de)(de)并發連(lian)接(jie),體(ti)現更高的(de)(de)效率,這點使 Nginx尤其受到虛擬(ni)主(zhu)機提供商的(de)(de)歡(huan)迎。在高連(lian)接(jie)并發的(de)(de)情況下,Nginx是Apache服務器不錯的(de)(de)替(ti)代品,而且Nginx在美國(guo)是做虛擬(ni)主(zhu)機生意的(de)(de)老板們經常選(xuan)擇(ze)的(de)(de)軟件平臺之一。能夠支(zhi)(zhi)持高達 50,000個并發連(lian)接(jie)數的(de)(de)響應, 感謝Nginx為(wei)我們選(xuan)擇(ze)了epoll and kqueue 作(zuo)為(wei)開(kai)發模型。
Nginx作為負載均衡服(fu)務(wu)器既(ji)可以(yi)在內(nei)部直(zhi)接支持(chi)Rails和PHP程序(xu)對外進行(xing)服(fu)務(wu), 也可以(yi)支持(chi)作為HTTP代(dai)理 服(fu)務(wu)器對外進行(xing)服(fu)務(wu)。Nginx采用(yong)C進行(xing)編寫(xie), 不論是系統資源開銷還是CPU使用(yong)效率都比 Perlbal 要好很多。
作為郵(you)件(jian)代(dai)理服(fu)務器,Nginx 同(tong)時(shi)也(ye)是(shi)一個(ge)非常優秀(xiu)的(de)郵(you)件(jian)代(dai)理服(fu)務器(最早開發(fa)這個(ge)產品的(de)目的(de)之一也(ye)是(shi)作為郵(you)件(jian)代(dai)理服(fu)務器)。Nginx是一個(ge)安裝非(fei)(fei)常的(de)簡單 , 配置(zhi)文件非(fei)(fei)常簡潔(還能夠(gou)支(zhi)持(chi)perl語法), Bugs非(fei)(fei)常少的(de)服(fu)務器:,Nginx啟動特別容易, 并且幾(ji)乎(hu)可以做到7*24不(bu)間斷(duan)運(yun)行(xing)(xing),即使運(yun)行(xing)(xing)數(shu)個(ge)月也不(bu)需(xu)要重新啟動,當然,你(ni)還能夠(gou)不(bu)間斷(duan)服(fu)務的(de)情況下進(jin)行(xing)(xing)軟件版本的(de)升級。
Nginx配置簡潔, Apache復雜,Nginx靜態處理性能比Apache高3倍以上(shang),Apache對PHP支持(chi)比較簡(jian)單,Nginx需要配(pei)合(he)其他后(hou)端(duan)用。Apache的組件比Nginx多,現在Nginx才是Web服務器(qi)的優選。
最核心的區別(bie)在(zai)于apache是同步多(duo)進(jin)程模(mo)型,一個連(lian)接(jie)對應一個進(jin)程,nginx是異步的,多(duo)個連(lian)接(jie)(萬(wan)級別(bie))可以對應一個進(jin)程。
nginx處理靜態(tai)文件好,耗費(fei)內存(cun)少(shao)。但無(wu)疑apache仍然是目前的(de)主流,有很多豐富(fu)的(de)特性,所(suo)以(yi)還(huan)需要搭配(pei)著來。當然如果(guo)能確定(ding)nginx就(jiu)適合需求,那(nei)么使(shi)用nginx會是更經濟的(de)方(fang)式。
從個(ge)人過往的(de)使用情況來(lai)看,nginx的(de)負(fu)載能(neng)力比apache高很多,最(zui)新的(de)服務器也大(da)多改(gai)用nginx了(le)。而且nginx改(gai)完配(pei)置能(neng)-t測試(shi)一下配(pei)置有沒有問題,apache重啟的(de)時候(hou)發現配(pei)置出錯(cuo)了(le),會(hui)很崩潰,改(gai)的(de)時候(hou)都會(hui)非常小心翼(yi)翼(yi)現在看有好多集群(qun)站,前端nginx抗并發,后端apache集群(qun),配(pei)合的(de)也不錯(cuo)。
nginx處理動態請求是雞肋,一般動態請求要apache去做,nginx只適合靜態和反向。 聰哥人經驗來看,nginx是很(hen)不(bu)錯(cuo)的(de)前(qian)端服務器,負載性能很(hen)好,在老一代奔騰服務器上開(kai)Nginx,用webbench模擬10000個(ge)靜態(tai)文件(jian)請求毫不吃力。apache對php等語言支持很好,此外,apache有很強大的支持網絡,發展時間相對nginx更久,bug少但是apache有先天不支持多核心處理負載的缺點,建議使用nginx做前端,后端用apache,大型(xing)網站建議用nginx自帶(dai)的集群功能。
Nginx優于apache的(de)主要兩點,1.Nginx本身(shen)就是一(yi)個(ge)反向代理(li)服(fu)務器;2.Nginx支(zhi)持(chi)7層負載均衡。Nginx可能會(hui)比apache支(zhi)持(chi)更高的(de)并發,但總得(de)來說,Aapche依然是大部分公司的(de)首先(xian),因為其(qi)成熟的(de)技術(shu)和開發社(she)區已經也是非常不錯(cuo)的(de)性能。
你對web server的(de)(de)需求決(jue)定你的(de)(de)選(xuan)擇。大(da)部分情(qing)況(kuang)下nginx都優(you)于APACHE,比如說靜態(tai)文件處(chu)(chu)理、PHP-CGI的(de)(de)支持、反向代理功能、前端Cache、維持連接等(deng)等(deng)。在(zai)Apache+PHP(prefork)模式下,如果PHP處(chu)(chu)理慢或者前端壓力(li)很(hen)大(da)的(de)(de)情(qing)況(kuang)下,很(hen)容易出現(xian)Apache進程數飆升,從而拒絕(jue)服務的(de)(de)現(xian)象。 可以看(kan)一下(xia)nginx lua模塊://github.com/chaoslaw...apache比nginx多的(de)模塊,可直接用(yong)lua實現apache是(shi)最(zui)流行的(de),why?大多數人懶得(de)更新到nginx或(huo)者學新事(shi)物。
對于nginx,我喜歡它配置文件寫(xie)的很(hen)(hen)(hen)簡潔,正則配置讓很(hen)(hen)(hen)多事情(qing)變得簡單運行(xing)效(xiao)率高,占(zhan)用資源少,代理功(gong)能強大,很(hen)(hen)(hen)適合做前端響應服務器。Apache在處理動態有優(you)勢,Nginx并發性比(bi)較好,CPU內存(cun)占用低,如果rewrite頻繁(fan),那(nei)還是(shi)Apache吧。
