標籤:

請問nginx比apache性能高為什麼apache現在依然流行?


「性能是個筐,什麼都往裡裝」

性能好只是 IO 性能好。而 Apache 的 CPU 性能更好。

對於純 IO 型的靜態資源,顯然 Nginx 更適合。

就算 Nginx 並發數再高,如果這些請求不能被及時處理,後續請求一樣要排隊,說白了就是吞吐不行。


謝邀

看數據說話

Apache vs. Nginx vs. Microsoft-IIS usage statistics

Usage broken down by ranking

rank 前100萬的,apache使用量大於nginx

rank 前10萬的,nginx使用量大於apache

從趨勢看

nginx 在走高,apache在降低

在來看下官方changelog

http://nginx.org/en/CHANGES

從2004年10月提交0.1.0版本,功能hin弱

圍觀下apache https://zh.wikipedia.org/wiki/Apache_HTTP_Server

1996年就是主流了。

對於商業公司的技術選型來說,在性能沒有壓倒性優勢的對比時候,穩定性高於一切。

在來看下 wiki Nginx 的history,流量大站是在12年以後才換成nginx。

也就是主流的流量大站換方案到現在也就4年左右。

考慮到很多流量大站的並不是技術驅動,而是商業驅動。換方案的成本。在沒有壓倒性優勢和低成本方案的情況下。apache可以運作就夠了。

對於新興的互聯網公司嘛。。


Nginx在前端調度,所以有時候探測的不準。

就拿PHP來說,Nginx跟PHP沒關係,PHP是PHP-fpm解析,Nginx只是代理。

Nginx只是解析靜態內容。

Win下沒PHP-fpm來管理PHP進程,所以只能用Nginx+PHP-cgi,進程死掉服務就停了,沒PHP-fpm管理調度重啟進程。Win下盡量用Apache。

Unix/Linux下PHP-fpm無法自動釋放內存返回給系統,只能請求一定數量後結束進程,並重啟一個進程這種辦法釋放內存。

Apache其實還是很好的,Apache和Nginx就像Firefox和Chrome關係。有了Chrome後Firefox才上進多了。


一個是io密集型,一個是計算密集型,根本無法比較,性能高這個結論從何而來?


我想認真地答一次題了。

Nginx 確實適合做靜態資源分發,性能確實比 Apache 比要高很多,我在 MacBook Pro 本地使用 ab 進行並發測試,單張 200KB 圖片,並發量 8W 對 2W,四倍。

另一方面,Apache + mod_php 已經成熟到開箱無需配置絕大多數性能夠用的場景下穩定跑 N 年不掛。nginx + PHP-FPM 說開箱即用還差得遠。本地壓測普通 PHP 網站,Apache 巋然不動,PHP-FPM 掛的一塌糊塗。當然,我明白這是缺乏個性配置、沒有一對多負載均衡、缺少監控工具的原因,但是絕大多數的網站訪問量是非常低的,在這種場景下,顯然 Apache 更省事兒。

其實大家都不傻,能簡單地解決問題,誰又想去不斷折騰呢?Apache、Nginx 各有各的場景罷了,現在 Nginx + Apache 前後端搭配不也挺多的嘛哈哈。可憐的 PHP-PFM :-D


成熟有時候比單方面的優勢更為重要。


要說為何流行,要先明白這兩個東西被經常按怎樣的方式來運行。

Apache 很有年頭了,該支持的運行模式都支持,CGI、動態編譯、靜態編譯,你想怎樣都可以,唯獨架構老舊、性能不佳而令人詬病。相比而言,Nginx 作為後起之秀,在異構的模式上選擇了一條路走到黑,以 FastCGI 方式運行其上的 PHP 擁有非常好的調度性能,並且因為是異構,Nginx 本身掛掉的概率也變得更小,FPM 在此時充當了冤大頭,這也是目前 Nginx 的主流應用模式。

話說回來 Apache 呢,大概用它的人應該都是以動態編譯的方式在各種環境中運行的吧,動態編譯決定了 PHP 是以 Apache 的動態模塊按同步的模式來運行的,兩者相輔相成、同生共死,但凡出現什麼疑難雜症,基本可以忽略 Apache&<-&>PHP 中間層的問題,因為在編譯時已完成合體、沒什麼好說的。並且,因為是同步架構,PHP 也能更直接的控制 HTTP 協議層的各種請求和響應行為,例如 PHP 直接操作輸出緩衝區一秒一個位元組的回顯給客戶端瀏覽器,這是 Nginx + FPM + PHP 這種異構模式所做不到的(因為 CGI 層有獨立的 PHP 不可控的數據緩衝地帶),同時,因為 Apache 本身也具有十分多的動態機制,例如 Rewrite 可以放在 .htaccess 內直接修改而不用重啟 httpd 等等,使得 Apache 整體上對於需要彈性的運行環境天然具有更良好的操作體驗,非常適合開發環境。

以上說的都是優點,再說說缺點,動態編譯到一起後,httpd 每處理一次請求,可想而知後面是帶著了多麼大的一串資源在跑一次請求會話,一個進程運行期間的每個環節(httpd-&>php-&>exts)所佔的資源,都會對同一進程的其它環節相當於上了一把互斥鎖,靠後的 php 沒跑完,那這個進程的 httpd 前端就別想再受理其它請求,一旦遇到高密集請求的情況,一方面是沒處理完的進程各個體積臃腫滯留在內存里吃著 CPU,另一方面是新的請求要求 httpd fork 出更多子進程以應對,因果輪迴,Panic 去吧。

所以,結合優缺點,以及對周圍的觀察,仍然使用 Apache 的可能有以下幾種情況:

1、本地開發環境,需要靈活配置和機動響應,對性能不敏感;

2、性能要求不十分高、彈性需求大於性能需求的小型生產環境;

3、情懷驅使、不見性能黑洞心不死的老派人員。

其它場景還有什麼,那就只剩高性能、高穩定密集型的生產環境了,這確實不是 Apache 所擅長的,不出問題則已,出問題了就是一個大型故障點、很難控制,即便你玩 mpm=worker 也不行(線程模式的 PHP 出問題只會更糟,而且它真的更容易出問題 -_,-)。Apache 架構太笨重了,Nginx 針對這個領域做了它該做的、並且做得十分出色,但是 Nginx 依然很年輕,所以 Apache 仍會在未來以它相對更深厚的沉澱在一些場景下有它的用武之處。

綜上,為個人認為 Apache 老不死、死不透的一些原因,部分闡述會有片面之詞,欠妥之處還望指正。


因為有xmap(好像是叫這個吧,是一個套餐,x忘了是什麼了,m是mysql,a就是Apache,p當然是php)


謝邀

因為大部分開發人員的電腦是WINDOS……

另外,現在伺服器端基本都是NGINX吧?


要分使用場景


nginx+fpm與lamp對比,lamp並不一定是更差。因為nginx使用了epoll的關係,在處理並發能力上確實比apache好很多,如果是跑靜態文件,nginx優勢很大,跑php,優勢就很不好說,因為一般情況下,瓶頸會出現的PHP的處理能力上。我們公司的Web伺服器,瓶頸主要在php處理的CPU資源佔用了,用apache與nginx其實差不了多少。


殺雞不用宰牛刀,沒必要。而且雞刀用的熟練。


nginx只是io復用,io並發比Apache高而已。


什麼叫流行。。

現在前面基本都是nginx。鬼知道後面有啥

我.net前面還放了個nginx呢。。。


apache現在流行是因為一些老的程序員更懂的怎麼去優化他,怎麼讓他的性能更穩定。,nginx畢竟是新事物,大的企業對他還是有一定的排斥期的,大的企業需要的是代碼更穩定的跑對伺服器的選擇很偏向於成熟的技術。個人認為。


Apache 還流行嗎?我連自己的開發環境都部署 Nginx 了。


只是初學者覺得Apache流行把。業界企業沒有用的

簡直了,評論里人都是怎麼理解的,能不能對比問題看答案。。


推薦閱讀:

為什麼 node.js 的官網不用 node.js 而用 nginx 搭建?
Nginx 和 Apache 各有什麼優缺點?
有哪些知名網站Web伺服器是Nginx?
Nginx反向代理為什麼可以提高網站性能?

TAG:PHP | Nginx | Apache |