首頁 > 後端開發 > php教程 > 既然nginx比apache快,為什麼nginx沒有取代apache?

既然nginx比apache快,為什麼nginx沒有取代apache?

WBOY
發布: 2016-08-27 09:06:49
原創
1312 人瀏覽過

現在很多雲端主機的整合環境或是各種公有雲也預設提供的都是lighttpd或nginx伺服器,為什麼這些效能更高的伺服器軟體沒有取代apache?

回覆內容:

現在很多雲端主機的整合環境或是各種公有雲也預設提供的都是lighttpd或nginx伺服器,為什麼這些效能更高的伺服器軟體沒有取代apache?

Nginx比Apache輕量高效是肯定的,而且兩者都很穩定.

netcraft統計,2016年2月份,在排名前一百萬最繁忙的站點中,Apache約46%,Nginx約25%,IIS不足12%.值得注意的是,在前百萬繁忙的站點中, Nginx份額接約25%並保持增長趨勢,Apache和IIS均呈下降趨勢.也就是說高並發的網站轉向Nginx是趨勢,比如國內阿里使用的Tengine就是基於Nginx二次開發的分支.

而對於大多數虛擬主機用戶來說,根本談不上高並發,因為頻寬才是瓶頸,2M頻寬還談什麼並發,是吧.而且Apache支援不用重載配置的.htaccess配置,在易用性上要比Nginx配置好一些.也就是Apache+PHP架構要比Nginx簡單,在不追求什麼並發的場景,為什麼要換一套架構呢?夠用能用好用就行了唄.

Nginx回傳502 Bad Gateway錯誤不是因為Nginx的問題,而是因為後端的問題.
例如後端PHP-FPM在處理一個請求時進程崩潰了,那麼Nginx就會回傳502錯誤.
當然你可以用fastcgi_next_upstream配置讓Nginx把請求轉移給另一個upstream處理.
fastcgi_next_upstream error timeout invalid_header http_500 http_502 http_504;
Nginx+PHP-FPM實現了動靜分離,負載均衡,故障,要在高acheAaches .
內建PHP模組的Apache進程在處理PHP時就無法處理靜態資源,而Nginx則不需要擔心這個問題,因為處理PHP是PHP-FPM的事,這就是動靜分離.而且Nginx支援upstream配置PHP-FPM叢集實現負載平衡,這點也是Apache不擅長的.

PHP-FPM配合Nginx還可以把I/O密集操作分離出來,減少阻塞對整個PHP應用的影響.
用戶下載和curl請求是典型的I/O密集型操作,因為耗時主要發生在網絡I /O和磁碟I/O.
需要PHP認證的下載操作可以委託為Nginx的AIO線程池:
header("X-Accel-Redirect: $filepath");
至於curl操作,例如可以建立一個監聽9001埠的名為io的PHP-FPM進程池(pool),
專門負責處理curl操作(透過Nginx分發),避免curl操作阻塞到監聽9000埠的www進程池.
這時io進程池多開點進程也無所謂:

<code>nginx.conf: 访问io.php的请求都交给监听9001的PHP-FPM进程池处理
location = /io.php {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
php-fpm: 正常脚本由静态www池处理,阻塞脚本由动态io池处理
[www]
;名为www的进程池监听9000端口,常驻进程数量为固定4个
listen = 127.0.0.1:9000
pm = static
pm.max_children = 4
[io]
;名为io的进程池监听9001端口,进程数常驻4个,最大8个
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 8
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 4</code>
登入後複製

其中I/O密集這個進程池[io]採用動態的prefork進程,比如這裡是繁忙時8個,空閒時4個.
利用PHP-FPM提供的池的隔離性,分離計算密集和I/O密集操作,可以減少阻塞對整個PHP應用的影響.

與快相對應的,是穩定。
一些對並發等效能要求不是很高的網站,採用apache是​​種不錯的選擇。

因為兩個東西的重點不一樣,Apache本身內建了很多東西,無需借助其他東西就能夠幾乎所有的Web類型應用進行支援。而Nginx不同,它在靜態檔案的處理、高並發方面比較有優勢。
Apache側重在完整穩定上,而Nginx側重在輕高效上,很多時候Apache和Nginx是配合使用的,Nginx配置在Apache前面,用它擋住靜態文件的請求(網站今天資源的請求佔了大部分的),Nginx處理不了的內容菜餚才轉發給Apache來處理。

nginx的確更優秀一些,但是不是所有的網站非要用多麼追求極致的東西,得過且過就行了。說到底,是人們懶惰不願意接收新東西,怕風險,怕擔責任。

LAMP的鍋,一個裝上就能用,而且培訓的老師教過,一個要學,許多人遇到問題都是寧可多花10倍的工作時間來適配一個自己會的東西、以後再花100倍的時間來填這個大坑也不願意花一天時間學一個新東西的。

任何東西都有優點和缺點所以完全替代會很難最好就是結合著用再說以前好多都用的apache 好多人懶得弄新的東西人們剛開始對新的事物都有抵觸心理就好像你沒來帝都的時候回想地鐵擠得要死節奏快當你真的來了會發現也沒那麼恐怖

主要是因為Nginx改配置文件之後需要重啟才能生效,不像Apache可以直接解析.htaccess文件,而主機商不可能因為用戶修改自己的配置文件之後就重啟Nginx的,這樣會影響到其他用戶的使用。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板