結(jié)論:沒(méi)有誰(shuí)優(yōu)于誰(shuí),都有各自的長(zhǎng)處和短板比原。
nginx-vs-apache.png
Nginx 與 Apache 的區(qū)別
- 二者最核心的區(qū)別在于 Apache 是同步多進(jìn)程模型插佛,一個(gè)連接對(duì)應(yīng)一個(gè)進(jìn)程;Nginx 是異步的量窘,多個(gè)連接(萬(wàn)級(jí)別)可以對(duì)應(yīng)一個(gè)進(jìn)程 雇寇。Nginx 處理靜態(tài)文件好, 耗費(fèi)內(nèi)存少. 但無(wú)疑 Apache 仍然是目前的主流, 有很多豐富的特性. 所以還需要搭配著來(lái). 當(dāng)然如果能確定 Nginx 就適合需求, 那么使用 Nginx 會(huì)是更經(jīng)濟(jì)的方式。
- Nginx 的負(fù)載能力比 Apache 高很多蚌铜。最新的服務(wù)器也改用 Nginx 了锨侯。而且 Nginx 改完配置能 -t 測(cè)試一下配置有沒(méi)有問(wèn)題。
- Apache 重啟的時(shí)候發(fā)現(xiàn)配置出錯(cuò)了冬殃,會(huì)很崩潰囚痴,改的時(shí)候都會(huì)非常小心翼翼現(xiàn)在看有好多集群站,前端 Nginx 抗并發(fā)造壮,后端 Apache 集群, 配合得也不錯(cuò)骂束。
- Nginx 處理動(dòng)態(tài)請(qǐng)求是雞肋耳璧,一般動(dòng)態(tài)請(qǐng)求要 Apache 去做,Nginx 只適合靜態(tài)和反向展箱。
- 從經(jīng)驗(yàn)來(lái)看旨枯,Nginx 是很不錯(cuò)的前端服務(wù)器,負(fù)載性能很好混驰,Nginx 用 webbench 模擬 10000 個(gè)靜態(tài)文件請(qǐng)求毫不吃力攀隔。Apache 對(duì) php 等語(yǔ)言的支持很好,此外 Apache 有強(qiáng)大的支持網(wǎng)絡(luò)栖榨,發(fā)展時(shí)間相對(duì) Nginx 更久昆汹,bug 少但是 Apache 有先天不支持多核心處理負(fù)載雞肋的缺點(diǎn),建議使用 Nginx 做前端婴栽,后端用 Apache满粗。大型網(wǎng)站建議用 Nginx 自代的集群功能。
- 大部分情況下 Nginx 都優(yōu)于 Apache愚争,比如說(shuō)靜態(tài)文件處理映皆、PHP-CGI 的支持挤聘、反向代理功能、前端 Cache捅彻、維持連接等组去。在 Apache+PHP(prefork)模式下,如果 PHP 處理慢或者前端壓力很大的情況下步淹,很容易出現(xiàn) Apache 進(jìn)程數(shù)飆升从隆,從而拒絕服務(wù)的現(xiàn)象。
- Apache 在處理動(dòng)態(tài)有優(yōu)勢(shì)贤旷,Nginx 并發(fā)性比較好广料,CPU 內(nèi)存占用低,如果 rewrite 頻繁幼驶,那還是 Apache 吧艾杏!
- 一般來(lái)說(shuō),需要性能的 web 服務(wù)盅藻,用 Nginx 购桑。如果不需要性能只求穩(wěn)定,那就 Apache 吧氏淑。
功能對(duì)比
Nginx和Apache一樣勃蜘,都是HTTP服務(wù)器軟件,在功能實(shí)現(xiàn)上都采用模塊化結(jié)構(gòu)設(shè)計(jì)假残,都支持通用的語(yǔ)言接口缭贡,如PHP、Perl辉懒、Python等阳惹,同時(shí)還支持正向和反向代理、虛擬主機(jī)眶俩、URL重寫莹汤、壓縮傳輸、SSL加密傳輸?shù)取?/p>
- 在功能實(shí)現(xiàn)上颠印,Apache的所有模塊都支持動(dòng)纲岭、靜態(tài)編譯,而Nginx模塊都是靜態(tài)編譯的线罕,
- 對(duì)FastCGI的支持止潮,Apache對(duì)Fcgi的支持不好,而Nginx對(duì)Fcgi的支持非常好钞楼;
- 在處理連接方式上沽翔,Nginx支持epoll,而Apache卻不支持;
- 在空間使用上仅偎,Nginx安裝包僅僅只有幾百K跨蟹,和Nginx比起來(lái)Apache絕對(duì)是龐然大物。
Nginx相對(duì)Apache的優(yōu)點(diǎn)
- 輕量級(jí)橘沥,同樣是web 服務(wù)窗轩,比apache 占用更少的內(nèi)存及資源
- 靜態(tài)處理,Nginx 靜態(tài)處理性能比 Apache 高 3倍以上
- 抗并發(fā)座咆,nginx 處理請(qǐng)求是異步非阻塞的痢艺,而apache則是阻塞型的,在高并發(fā)下nginx 能保持低資源低消耗高性能介陶。在--Apache+PHP(prefork)模式下堤舒,如果PHP處理慢或者前端壓力很大的情況下,很容易出現(xiàn)Apache進(jìn)程數(shù)飆升哺呜,從而拒絕服務(wù)的現(xiàn)象舌缤。
- 高度模塊化的設(shè)計(jì),編寫模塊相對(duì)簡(jiǎn)單
Apache相對(duì)Nginx的優(yōu)點(diǎn)
- rewrite某残,比nginx 的rewrite 強(qiáng)大
- 模塊超多国撵,基本想到的都可以找到
- Apache對(duì)PHP支持比較簡(jiǎn)單,Nginx需要配合其他后端用
同時(shí)使用Nginx和Apache
由于Nginx和Apache各自的優(yōu)勢(shì)玻墅,現(xiàn)在很多人選擇了讓兩者在服務(wù)器中共存介牙。在服務(wù)器端讓Nginx在前,Apache在后澳厢。由Nginx做負(fù)載均衡和反向代理环础,并且處理靜態(tài)文件,將動(dòng)態(tài)請(qǐng)求(如PHP應(yīng)用)交給Apache去處理剩拢。
nginxwithapache.png
關(guān)注公眾號(hào)【技術(shù)全沾】學(xué)習(xí)更多有趣的編程知識(shí)线得。