我為什麼推薦大家使用 Nginx 而不是 Apache?
最後Nginx和Apache的差異總結成一句話就是:「Nginx適合處理靜態請求和反向代理,Apache適合處理動態請求」。但這個差異化只有在請求量達到一定的閾值時表現差異才能表現出來,對於 WordPress 、 Typecho 等等這裡動態站點來說某一天流量達到這個閾值的時候,還可以部署LNMPA這樣的生產環境來應對和解決。所以流量閾值需求不到的時候,選擇Nginx是性價比最好的選擇了。
無論是 Nginx 還是 Apache 都是 Web 伺服器應用,通俗點說我們的網站都是需要 Web 伺服器應用來展現給客戶的,而伺服器是供 Web 伺服器應用正常穩定的運行的基礎。所以說選擇好 Web 伺服器應用是會影響到網站性能表現的,甚至會影響到用戶的瀏覽體驗。而目前比較主流的 Web 伺服器應用也就是 Nginx 和 Apache 了,今天就給大家闡述一下為什麼我一直都推薦大家使用 Nginx 而不是 Apache?
有關 Nginx 和 Apache 的介紹我就不做贅述了,大家自行百度、谷歌一下就可以了解了,廢話不多說了,直奔主題:
1、作為 Web 伺服器:相比 Apache,Nginx 使用更少的資源,支持更多的並發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連接並發的情況下,Nginx 是 Apache 伺服器不錯的替代品;Nginx 在美國是做虛擬主機生意的老闆們經常選擇的軟體平台之一。能夠支持高達 50000 個並發連接數的響應,感謝 Nginx 為我們選擇了 epoll and kqueue 作為開發模型。
Nginx 作為負載均衡伺服器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP 代理伺服器對外進行服務。Nginx 採用 C 進行編寫,不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好很多。
2、Nginx 配置簡潔,Apache 複雜,Nginx 啟動特別容易,並且幾乎可以做到 7*24 不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟體版本的升級。Nginx 靜態處理性能比 Apache 高 3 倍以上,Apache 對 PHP 支持比較簡單,Nginx 需要配合其他後端來使用,Apache 的組件比 Nginx 多。
3、最核心的區別在於 Apache 是同步多進程模型,一個連接對應一個進程;Nginx 是非同步的,多個連接(萬級別)可以對應一個進程。
4、Nginx 的優勢是處理靜態請求,cpu 內存使用率低,Apache 適合處理動態請求,所以現在一般前端用 Nginx 作為反向代理抗住壓力,Apache 作為後端處理動態請求。
Nginx 相對 Apache 的優點
輕量級,同樣起 web 服務,比 Apache 佔用更少的內存及資源
抗並發,Nginx 處理請求是非同步非阻塞的,而 Apache 則是阻塞型的,在高並發下 Nginx 能保持低資源低消耗高性能
高度模塊化的設計,編寫模塊相對簡單
社區活躍,各種高性能模塊出品迅速啊
Apache 相對 Nginx 的優點
rewrite,比 Nginx 的 rewrite 強大
模塊超多,基本想到的都可以找到
少 bug,Nginx 的 bug 相對較多
超穩定
存在就是理由,一般來說,需要性能的 web 服務,用 Nginx。如果不需要性能只求穩定,那就 Apache 吧。後者的各種功能模塊實現得比前者,例如 ssl 的模塊就比前者好,可配置項多。
這裡要注意一點,epoll(freebsd 上是 kqueue)網路 IO 模型是 Nginx 處理性能高的根本理由,但並不是所有的情況下都是 epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,Apache 的 select 模型或許比 epoll 更高性能。當然,這只是根據網路 IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。
最後 Nginx 和 Apache 的差異總結成一句話就是:「Nginx 適合處理靜態請求和反向代理,Apache 適合處理動態請求」。但這個差異化只有在請求量達到一定的閾值時表現差異才能表現出來,對於 WordPress 、 Typecho 等等這裡動態站點來說某一天流量達到這個閾值的時候,還可以部署 LNMPA 這樣的生產環境來應對和解決。所以流量閾值需求不到的時候,選擇 Nginx 是性價比最好的選擇了。
TAG:博客站長圈 |