nginx和tomcat的區別(http server and application server)
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 分發到客戶端。