1. 程式人生 > >Nginx和Tomcat的區別

Nginx和Tomcat的區別

nginx和tomcat的區別:

web上的server都叫web server,但是大家分工也有不同的。 nginx常用做靜態內容服務和代理伺服器(不是你FQ那個代理),直面外來請求轉發給後面的應用服務(tomcat,django什麼的),tomcat更多用來做做一個應用容器,讓java web app跑在裡面的東西,對應同級別的有jboss,jetty等東西。 但是事無絕對,nginx也可以通過模組開發來提供應用功能,tomcat也可以直接提供http服務,通常用在內網和不需要流控等小型服務的場景。 apache用的越來越少了,大體上和nginx功能重合的更多。

嚴格的來說,Apache/Nginx 應該叫做「HTTP Server」;而 Tomcat 則是一個「Application Server」,或者更準確的來說,是一個「Servlet/JSP」應用的容器(Ruby/Python 等其他語言開發的應用也無法直接執行在 Tomcat 上)。

一個 HTTP Server 關心的是 HTTP 協議層面的傳輸和訪問控制,所以在 Apache/Nginx 上你可以看到代理、負載均衡等功能。客戶端通過 HTTP Server 訪問伺服器上儲存的資源(HTML 檔案、圖片檔案等等)。通過 CGI 技術,也可以將處理過的內容通過 HTTP Server 分發,但是一個 HTTP Server 始終只是把伺服器上的檔案如實的通過 HTTP 協議傳輸給客戶端。 而應用伺服器,則是一個應用執行的容器。它首先需要支援開發語言的 Runtime(對於 Tomcat 來說,就是 Java),保證應用能夠在應用伺服器上正常執行。其次,需要支援應用相關的規範,例如類庫、安全方面的特性。對於 Tomcat 來說,就是需要提供 JSP/Sevlet 執行需要的標準類庫、Interface 等。為了方便,應用伺服器往往也會整合 HTTP Server 的功能,但是不如專業的 HTTP Server 那麼強大,所以應用伺服器往往是執行在 HTTP Server 的背後,執行應用,將動態的內容轉化為靜態的內容之後,通過 HTTP Server 分發到客戶端。

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的負載均衡功能可以把請求通過演算法分發到各個不同的例項進行處理

web中靜態資源和動態資源的概念及區別:

1.靜態資源和動態資源的概念

簡單來說:

靜態資源:一般客戶端傳送請求到web伺服器,web伺服器從記憶體在取到相應的檔案,返回給客戶端,客戶端解析並渲染顯示出來。

動態資源:一般客戶端請求的動態資源,先將請求交於web伺服器,web伺服器連線資料庫,資料庫處理資料之後,將內容交給web伺服器,web伺服器返回給客戶端解析渲染處理。

2.靜態資源和動態資源的區別

a.靜態資源一般都是設計好的html頁面,而動態資源依靠設計好的程式來實現按照需求的動態響應;

b.靜態資源的互動性差,動態資源可以根據需求自由實現;

c.在伺服器的執行狀態不同,靜態資源不需要與資料庫參於程式處理,動態可能需要多個數據庫的參與運算。  

參考資料: