簡體   English   中英

Apache還是nginx? 我想了解Nginx的基本工作流程,它的優點和缺點

[英]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有幾個更大的優點:

  • 它使用不同的“池”,每個池都可以作為單獨的Linux用戶運行。 這提供了一種簡單有效的隔離網站的方法(例如,如果它們由不應該閱讀彼此代碼的不同客戶運行),而沒有suexec或suphp的開銷或骯臟。
  • 它具有慢速日志功能,可以轉儲已運行超過X秒的任何腳本的PHP堆棧跟蹤。 這有助於診斷慢速代碼問題。

Php-fpm可以與Apache一起運行,實際上這可以讓你利用Apache更高效的Worker MPM(或Apache 2.4中的Event)。 但是,我的經驗是在Apache中配置它要比在nginx中配置它要復雜得多,即使使用Worker,它仍然不如nginx那么高效。

轉移到nginx的缺點 - 不是很多,但要記住的事情:

  • 它不支持.htaccess文件。 我認為這是個好事,因為.htaccess文件必須由Apache為每個請求解析,這可能會導致很大的開銷。
  • 需要重寫配置文件。 如果您有許多復雜的站點配置,這可能需要一些工作。 對於簡單的情況,它通常不是什么大問題。

Nginx的特征

  • Nginx很快,因為它不需要為每個新請求創建一個新進程。
  • HTTP代理和Web服務器功能
  • 能夠以較低的內存占用率處理10,000多個並發連接(每10k非活動HTTP保持活動連接約2.5 MB)
  • 處理靜態文件,索引文件和自動索引
  • 具有緩存的反向代理
  • 使用帶內健康檢查進行負載平衡
  • 容錯
  • Nginx使用非常少的內存,特別是對於靜態網頁。
  • FastCGI,SCGI,uWSGI支持緩存
  • 基於名稱和IP地址的虛擬服務器
  • IPv6的兼容
  • SPDY協議支持
  • FLV和MP4流媒體
  • 網頁訪問身份驗證
  • gzip壓縮和解壓縮
  • URL重寫有自己的重寫引擎
  • 使用即時gzip壓縮進行自定義日志記錄
  • 響應率和並發請求限制
  • 帶寬限制
  • 服務器端包含
  • 基於IP地址的地理定位
  • 用戶跟蹤
  • WebDAV的
  • XSLT數據處理
  • 嵌入式Perl腳本
  • Nginx具有高度可擴展性,性能不依賴於硬件。

只有Nginx,你會丟失一大堆特定於apache的功能,比如所有的mod_dav。 你有效地失去了很多模塊

結論

如果您需要Apache模塊,那么nginx的最佳用途是在Apache前面。 如果您可能在多個Apache實例之間使用它作為負載均衡器,那么您突然有一個混合設置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM