天天看點

Tomcat 與 Nginx,Apache的差別及優缺點 - 蘆葦の

Tomcat 與 Nginx,Apache的差別及優缺點

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伺服器友善開發者使用:

    HttpServer (Java HTTP Server )

    Python SimpleHTTPServer

使用這些類庫能夠非常容易的運作一個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的負載均衡功能可以把請求通過算法分發到各個不同的執行個體進行處理

==================================================================================

一、 定義:

1. Apache

Apache HTTP伺服器是一個子產品化的伺服器,可以運作在幾乎所有廣泛使用的計算機平台上。其屬于應用伺服器。Apache支援支援子產品多,性能穩定,Apache本身是靜态解析,适合靜态HTML、圖檔等,但可以通過擴充腳本、子產品等支援動态頁面等。

(Apche可以支援PHPcgiperl,但是要使用Java的話,你需要Tomcat在Apache背景支撐,将Java請求由Apache轉發給Tomcat處理。)

缺點:配置相對複雜,自身不支援動态頁面。

2. Tomcat:

Tomcat是應用(Java)伺服器,它隻是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴充,但是可以獨立于Apache運作。

3. Nginx

Nginx是俄羅斯人編寫的十分輕量級的HTTP伺服器,Nginx,它的發音為“engine X”,是一個高性能的HTTP和反向代理伺服器,同時也是一個IMAP/POP3/SMTP 代理伺服器。

二、 比較

1. Apache與Tomcat的比較

相同點:兩者都是Apache組織開發的,兩者都有HTTP服務的功能,兩者都是免費的

不同點:Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛拟主機、URL轉發等等),而Tomcat是Apache組織在符合Java EE的JSP、Servlet标準下開發的一個JSP伺服器.  

 Apache是一個Web伺服器環境程式,啟用他可以作為Web伺服器使用,不過隻支援靜态網頁如(ASP,PHP,CGI,JSP)等,動态網頁的就不行。如果要在Apache環境下運作JSP的話就需要一個解釋器來執行JSP網頁,而這個JSP解釋器就是Tomcat。

Apache:側重于HTTPServer ,Tomcat:側重于Servlet引擎,如果以Standalone方式運作,功能上與Apache等效,支援JSP,但對靜态網頁不太理想;

 Apache是Web伺服器,Tomcat是應用(Java)伺服器,它隻是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴充,但是可以獨立于Apache運作。

實際使用中Apache與Tomcat常常是整合使用:

如果用戶端請求的是靜态頁面,則隻需要Apache伺服器響應請求。 如果用戶端請求動态頁面,則是Tomcat伺服器響應請求。  因為JSP是伺服器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷。

可以了解Tomcat為Apache的一種擴充。

2. Nginx與Apache比較

1) nginx相對于apache的優點

輕量級,同樣起web 服務,比apache占用更少的記憶體及資源

抗并發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高并發下nginx 能保持低資源低消耗高性能  

高度子產品化的設計,編寫子產品相對簡單

提供負載均衡

社群活躍,各種高性能子產品出品迅速

2) apache 相對于nginx 的優點

apache的 rewrite 比nginx 的強大 ;

支援動态頁面;

支援的子產品多,基本涵蓋所有應用;

性能穩定,而nginx相對bug較多。

3) 兩者優缺點比較

Nginx 配置簡潔, Apache 複雜 ;

Nginx 靜态處理性能比 Apache 高 3倍以上 ;

Apache 對 PHP 支援比較簡單,Nginx 需要配合其他後端用;

Apache 的元件比 Nginx 多 ;

apache是同步多程序模型,一個連接配接對應一個程序;

nginx是異步的,多個連接配接(萬級别)可以對應一個程序;

nginx處理靜态檔案好,耗費記憶體少;

動态請求由apache去做,nginx隻适合靜态和反向;

Nginx适合做前端伺服器,負載性能很好;

Nginx本身就是一個反向代理伺服器 ,且支援負載均衡 。

3. 總結

Nginx優點:負載均衡、反向代理、處理靜态檔案優勢。

nginx處理靜态請求的速度高于apache;

Apache優點:相對于Tomcat伺服器來說處理靜态檔案是它的優勢,速度快。Apache是靜态解析,适合靜态HTML、圖檔等。

Tomcat:動态解析容器,處理動态請求,是編譯JSP\Servlet的容器,Nginx有動态分離機制,靜态請求直接就可以通過Nginx處理,動态請求才轉發請求到背景交由Tomcat進行處理。

Apache在處理動态有優勢,Nginx并發性比較好,CPU記憶體占用低,如果rewrite頻繁,那還是Apache較适合。