一、Nginx:
1.輕量級,採用C語言編寫的,同樣的web服務,會佔用更少的內存及資源;
2.抗併發,nginx以epoll and kqueue作爲開發模型,處理請求是異步非阻塞的,負載能力比apache高很多,而apache則是阻塞型的。在高併發下nginx能保持低資源低消耗高性能,而apache在PHP處理慢或者前端壓力很大的情況下,很容易出現進程數飆升,從而拒絕服務的現象;
3.nginx處理靜態文件好,靜態處理能力比apache高三倍以上;
4.nginx的設計高度模塊化,編寫模塊相對簡單;
5.nginx配置簡潔,正則配置讓很多事情變得簡單,而且改完配置可以使用-t測試配置有沒有問題,apache配置複雜,重啓的時候發現配置出錯了,會很崩潰;
6.nginx作爲負載均衡服務器,支持7層負載均衡;
7.nginx本身就是一個反向代理服務器,而且可以作爲非常優秀的郵件代理服務器;
8.啓動特別容易,並且幾乎可以做到7*24小時不間斷運行,即使運行數個月也不需要重新啓動,還能夠在不間斷服務的情況下進行軟件版本的升級;
9.社區活躍,各種高性能模塊出品迅速。
二、Apache
1.apache的rewrite比nginx強大,在rewrite頻繁的情況下,用apache;
2.apache發展到現在,模塊超多,基本想到的都可以找到;
3.apache更爲成熟,bug比較少,nginx的bug相對較多;
4.apache超穩定;
5.apache對PHP支持比較簡單,nginx需要配合其他後端用;
6.aoache在處理動態請求有優勢,nginx在這方面是雞肋,一般動態請求要apache去做,nginx適合靜態和反向代理;
7.apache仍然是目前的主流,擁有豐富的特性,成熟的技術和開發社區。
三、總結
兩者最核心的區別在於apache是同步多進程模型,一個連接對應一個進程,而nginx是異步的,多個連接(萬級別)可以對應一個進程;
一般來說,需要性能的web服務,用nginx。如果不需要性能只求穩定,更考慮apache,後者的各種功能模塊實現的比前者好,例如ssl的模塊就比前者好,可配置項多。epoll(freebad上是kqueue)網絡IO模型是nginx處理性能高的根本理由,但並不是所有情況下都是epoll大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache的select模型或許比epoll更高性能。當然,這只是根據網絡IO模型的原理做的一個假設,真正應用還是需要實測了再說的。