PHP面試記錄:apache和nginx的區別

【本文章是給自己看的,主要記錄下面試問題】

問,apache和nginx有啥區別嗎?你選哪個?

apache是一個連接一個進程,沒個請求都會建一個進程

nginx一個進程可以處理多個請求,nginx開發的時候就奔着高併發去的。

apache解析php有三種方式:

module模式----把apache接收到的請求交給php模塊處理,php模塊在apache裏面,如果php模塊卡死,服務器跟着卡死

CGI模式,apache把請求給CGI程序--這裏指php,CGI處理完後返回給apache輸出,每次請求的時候才啓動CGI,用完就釋放了

fast CGI,就是把CGI進程扔到內存裏,可以啓動多個CGI解釋器進程,被動等待apache的請求,常駐內存對內存開銷要求較大,fastCGI能獨立運行,但是對很多工作來說沒必要關心這個,誰會請求另一臺服務器上的php進程處理問題……

 

apache處理動態內容比較好,當然這是網上各種文章的普遍認識,但實際上apache本身的設計而言,他核心代碼量並不大,他的設計是模塊化設計,按需加載,處理php其實就是交給php去處理的,apache本身只是轉發了請求,也就是說動態處理能力實際上和php有關。早期php性能還比較低的時候,apache處理動態內容受到php模塊影響,想高也高不起來,同時,php的性能又受到數據庫的性能影響,I/O性能最終會反饋到apache上,也就是說,apache所謂的動態處理能力強的優勢,在現在普遍使用ssd硬盤,高性能內存的服務器,在php7全面更新核心代碼後,很難體現出來,多用於win平臺的開發的時候的本地服務器。

 

apache重寫規則rewrite更完善,也更加好用,當然了,對普通網站來說,根本沒必要重寫那麼多的東西,這個功能對於php而言有些雞肋。

 

nginx主要是是應對高併發,他讀取靜態頁面更好,大部分的php網站到最後都會做靜態化,所以nginx就成了首選。

nginx可以做反向代理,這點對於請求數量很多的網站很有用。畢竟負載均衡能解決很多問題。

nginx佔用資源少,高併發下也不會佔用太多資源。因爲nginx是異步非阻塞,apache是阻塞模型。

nginx是俄羅斯的一個大佬開發的(伊戈爾·賽索耶夫),確實沒有apache穩定,畢竟apache是sun公司維護的。

nginx號稱保持10000個沒有活動的連接,而這些連接只佔用2.5MB內存,因此普通的ddos攻擊無效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章