tomcat 與 nginx,apache 的區別是什么


問題

tomcat 與 nginx,apache的區別是什么?
這三者都是web server,那他們各自有什么特點呢?他們之間的區別是什么呢?
nginx 和 tomcat在性能上面有何異同。
tomcat用在java后台程序上,java后台程序難道不能用apache和nginx嗎?

回答

作者:David
鏈接:https://www.zhihu.com/question/32212996/answer/87524617
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

題主說的 Apache,指的應該是 Apache 軟件基金會下的一個項目—— Apache HTTP Server Project;Nginx 同樣也是一款開源的 HTTP 服務器軟件(當然它也可以作為郵件代理服務器、通用的 TCP 代理服務器)。HTTP服務器軟件本質上也是一種應用程序——它通常運行在服務器之上,綁定服務器的IP地址並監聽某一個 tcp 端口來接收並處理 HTTP 請求,這樣客戶端(一般來說是 IE, Firefox,Chrome 這樣的瀏覽器)就能夠通過HTTP協議來獲取服務器上的網頁(HTML格式)、文檔(PDF格式)、音頻(MP4格式)、視頻(MOV格式)等等資源。下圖描述的就是這一過程:

不僅僅是 Apache HTTP Server 和 Nginx,絕大多數編程語言所包含的類庫中也都實現了簡單的 HTTP 服務器方便開發者使用:

使用這些類庫能夠非常容易的運行一個 HTTP 服務器軟件,它們都能夠通過綁定 IP 地址並監聽 tcp 端口來提供 HTTP 服務。
Apache Tomcat 則是 Apache 基金會下的另外一個項目,與 Apache HTTP Server 相比,Tomcat 能夠動態的生成資源並返回到客戶端。Apache HTTP Server和Nginx都能夠將某一個文本文件的內容通過HTTP協議返回到客戶端,但是這個文本文件的內容是固定的——也就是說無論何時、任何人訪問它得到的內容都是完全相同的,這樣的資源我們稱之為靜態資源。動態資源則與之相反,在不同的時間、不同的客戶端訪問得到的內容是不同的,例如:包含顯示當前時間的頁面顯示當前 IP 地址的頁面 Apache HTTP Server 和 Nginx 本身不支持生成動態頁面,但它們可以通過其他模塊來支持(例如通過Shell、PHP、Python腳本程序來動態生成內容)。如果想要使用 Java 程序來動態生成資源內容,使用這一類 HTTP 服務器很難做到。Java Servlet 技術以及衍生的 Java Server Pages 技術可以讓 Java 程序也具有處理HTTP請求並且返回內容(由程序動態控制)的能力,Tomcat正是支持運行Servlet/JSP應用程序的容器(Container):

Tomcat 運行在 JVM 之上,它和 HTTP 服務器一樣,綁定IP地址並監聽 TCP 端口,同時還包含以下指責:

  • 管理 Servlet 程序的生命周期
  • 將 URL 映射到指定的 Servlet 進行處理
  • 與 Servlet 程序合作處理 HTTP 請求——根據HTTP請求生成 HttpServletResponse 對象並傳遞給 Servlet 進行處理,將 Servlet 中的 HttpServletResponse 對象生成的內容返回給瀏覽器

雖然 Tomcat 也可以認為是 HTTP 服務器,但通常它仍然會和 Nginx 配合在一起使用:

  • 動靜態資源分離——運用 Nginx 的反向代理功能分發請求:所有動態資源的請求交給 Tomcat,而靜態資源的請求(例如圖片、視頻、CSS、JavaScript 文件等)則直接由 Nginx 返回到瀏覽器,這樣能大大減輕 Tomcat 的壓力。
  • 負載均衡,當業務壓力增大時,可能一個 Tomcat 的實例不足以處理,那么這時可以啟動多個 Tomcat 實例進行水平擴展,而 Nginx 的負載均衡功能可以把請求通過算法分發到各個不同的實例進行處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM