[英]Apache or nginx ? I like to understand the basic working flow of Nginx , its advantage and disadvantage
對Apache或nginx的優缺點以及它們如何在內部工作以最大化資源利用率
我可以一起使用Apache和Nginx嗎? 如果我只使用Nginx那么我可以面對什么問題?
Apache有一些缺點,特別是當它與PHP模塊一起使用時。
Apache的流程模型使每個連接使用單獨的流程。 每個進程都包含PHP的所有開銷以及您可能已加載的任何其他模塊。 Apache進程可以運行PHP腳本或為一個請求提供靜態內容。 如果PHP有內存泄漏(有時會發生),則該過程的大小會繼續增加。 此外,當啟用KeepAlive(通常建議)時,該進程在連接后保持活動幾秒鍾,消耗另一個客戶端可能使用的“插槽”並幫助服務器更快地到達其MaxClients。
Nginx是另一種網絡服務器,通常使用Linux“epoll”API以非阻塞模式處理請求。 這意味着一個進程可以處理多個同時連接。 Epoll是一種有效的方式來告訴單個進程它需要處理哪些連接以及哪些連接可以等待。 Nginx的目標是解決“C10k”問題 - 如何擁有10,000個並發連接。
這自然與FastCGI流程管理器php-fpm齊頭並進。 Nginx本身沒有PHP內置。 當它收到一個PHP腳本的請求時,它會調用php-fpm來運行腳本,然后將結果返回給nginx,后者將其返回給客戶端。
與類似的Apache + mod_php配置相比,這都使用了更少的內存。
php-fpm比mod_php有幾個更大的優點:
Php-fpm可以與Apache一起運行,實際上這可以讓你利用Apache更高效的Worker MPM(或Apache 2.4中的Event)。 但是,我的經驗是在Apache中配置它要比在nginx中配置它要復雜得多,即使使用Worker,它仍然不如nginx那么高效。
轉移到nginx的缺點 - 不是很多,但要記住的事情:
Nginx的特征
只有Nginx,你會丟失一大堆特定於apache的功能,比如所有的mod_dav。 你有效地失去了很多模塊
結論
如果您需要Apache模塊,那么nginx的最佳用途是在Apache前面。 如果您可能在多個Apache實例之間使用它作為負載均衡器,那么您突然有一個混合設置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.