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