Apache/Nginx 應該叫做 HTTP Server,即安裝后生成httpd服務。
Tomcat 則是一個 Application Server,或者更准確的來說,是一個「Servlet/JSP」應用的容器(Ruby/Python 等其他語言開發的應用也無法直接運行在 Tomcat 上)
**********
一個 HTTP服務器,其關心的是 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 分發到客戶端。
打個比方:
nginx / apache是一輛卡車,上面可以裝一些東西如html等(靜態的)。但是不能裝水(動態的),要裝水必須要有桶(容器),Tomcat就是一個桶(裝像Java這樣的水),而這個桶也可以放在車上,也可以不放在卡車上。
客戶端(瀏覽器):人;
nginx / apache:卡車;
靜態頁面:毛巾;
tomcat:水桶;
動態頁面:水。
人要拿毛巾,可以直接從卡車上拿取;
人要拿水,需要先通過卡車找到車上的桶,才能取得(桶可以不放在車上,把桶單獨放在別的地方人也可以取到水);
nginx和apache的區別
1、nginx相對於apache的優點
2、作為 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的並發連接,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。
3、Nginx 配置簡潔, Apache 復雜 ,Nginx 靜態處理性能比 Apache 高 3倍以上 ,Apache 對 PHP 支持比較簡單,Nginx 需要配合其他后端用 ,Apache 的組件比 Nginx 多 ,現在 Nginx 才是 Web 服務器的首選
##Nginx對動態處理請求弱,這個我想與它本身的實現有關吧,它需要與其他模塊結合才能支持PHP等語言,而Apache則支持得較好,如果找到了底層實現的根本原因,歡迎留言指導~
4、最核心的區別在於apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程