Nginx
輕量級,采用(yong)(yong) C 進行編(bian)寫,同樣的 web 服務,會(hui)占用(yong)(yong)更(geng)少的內存及(ji)資源
抗并(bing)發(fa)(fa),nginx 以(yi) epoll and kqueue 作(zuo)為開發(fa)(fa)模型,處(chu)理請求是異步非阻(zu)塞(sai)的(de),負載能力(li)比(bi) apache 高很多,而 apache 則是阻(zu)塞(sai)型的(de)。在(zai)(zai)高并(bing)發(fa)(fa)下(xia) nginx 能保持低資(zi)源低消耗高性能 ,而 apache 在(zai)(zai) PHP 處(chu)理慢(man)或者(zhe)前端壓力(li)很大的(de)情況下(xia),很容易出現進程數飆升,從而拒絕服務(wu)的(de)現象。
nginx 處理(li)(li)靜(jing)態文件好,靜(jing)態處理(li)(li)性能比 apache 高三倍以(yi)上
nginx 的設計高度模塊化,編寫(xie)模塊相對簡單(dan)
nginx 配(pei)(pei)置(zhi)簡潔,正(zheng)則(ze)配(pei)(pei)置(zhi)讓很(hen)多事情變得簡單,而且(qie)改完配(pei)(pei)置(zhi)能使(shi)用 -t 測試配(pei)(pei)置(zhi)有(you)沒有(you)問(wen)題(ti),apache 配(pei)(pei)置(zhi)復(fu)雜 ,重啟的時候發現(xian)配(pei)(pei)置(zhi)出錯了,會很(hen)崩(beng)潰
nginx 作為負載均(jun)衡服務器(qi),支持 7 層負載均(jun)衡
nginx 本(ben)身就是一個反向(xiang)代理(li)服(fu)(fu)務器,而且(qie)可以作(zuo)為非(fei)常優秀(xiu)的郵件代理(li)服(fu)(fu)務器
啟(qi)動(dong)特(te)別容易, 并且幾乎(hu)可以做到 7*24 不間斷運行,即使運行數個月也不需要重新啟(qi)動(dong),還能夠不間斷服務的情況下進行軟件版本(ben)的升級(ji)
社區(qu)活躍,各(ge)種(zhong)高性能模塊出品(pin)迅速
Apache
apache 的 rewrite 比 nginx 強大,在 rewrite 頻繁的情(qing)況下(xia),用 apache
apache 發展到(dao)現(xian)在(zai),模塊(kuai)超多,基本想到(dao)的都(dou)可以找(zhao)到(dao)
apache 更為成熟(shu),少 bug ,nginx 的 bug 相對(dui)較(jiao)多
apache 超穩定
apache 對(dui) PHP 支(zhi)持比較(jiao)簡單(dan),nginx 需(xu)要配(pei)合(he)其他(ta)后端用
apache 在處理動態(tai)請求有優勢(shi),nginx 在這方面是雞肋(lei),一般(ban)動態(tai)請求要 apache 去做,nginx 適合靜態(tai)和(he)反向。
apache 仍然是目(mu)前的主流,擁有(you)豐富的特性(xing),成熟的技術和開發社區
總結
兩者最核(he)心(xin)的(de)(de)區別在于 apache 是同步(bu)多進程模(mo)型,一(yi)(yi)(yi)個(ge)(ge)連(lian)(lian)接(jie)對應一(yi)(yi)(yi)個(ge)(ge)進程,而(er) nginx 是異步(bu)的(de)(de),多個(ge)(ge)連(lian)(lian)接(jie)(萬級別)可(ke)以對應一(yi)(yi)(yi)個(ge)(ge)進程
一(yi)般來說,需要性能的(de)(de) web 服務,用 nginx 。如果(guo)(guo)不(bu)需要性能只求穩定,更考(kao)慮(lv) apache ,后者(zhe)(zhe)(zhe)的(de)(de)各種(zhong)功能模(mo)塊(kuai)實現得比前(qian)者(zhe)(zhe)(zhe),例如 ssl 的(de)(de)模(mo)塊(kuai)就比前(qian)者(zhe)(zhe)(zhe)好,可配置項多。epoll(freebsd 上是(shi)(shi) kqueue ) 網絡 IO 模(mo)型(xing)是(shi)(shi) nginx 處理(li)(li)性能高的(de)(de)根(gen)本(ben)理(li)(li)由,但(dan)并不(bu)是(shi)(shi)所有的(de)(de)情(qing)況(kuang)下都(dou)是(shi)(shi) epoll 大(da)獲全勝的(de)(de),如果(guo)(guo)本(ben)身提供(gong)靜態服務的(de)(de)就只有寥寥幾(ji)個(ge)文(wen)件,apache 的(de)(de) select 模(mo)型(xing)或許比 epoll 更高性能。當(dang)然(ran),這只是(shi)(shi)根(gen)據(ju)網絡 IO 模(mo)型(xing)的(de)(de)原理(li)(li)作的(de)(de)一(yi)個(ge)假設,真正的(de)(de)應用還是(shi)(shi)需要實測了再說的(de)(de)。
更為通用(yong)的方案是,前(qian)端 nginx 抗并發,后端 apache 集群,配合起來會更好(hao)。