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 分發到客戶端。
說到反向代理,可能很多人都聽說,但具體什么是反向代理,很多人估計就不清楚了。摘一段百度百科上的描述:反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
這里講得很直白。反向代理方式實際上就是一臺負責轉發的代理服務器,貌似充當了真正服務器的功能,但實際上并不是,代理服務器只是充當了轉發的作用,并且從真正的服務器那里取得返回的數據。這樣說,其實nginx完成的就是這樣的工作。我們讓nginx監聽一個端口,譬如80端口,但實際上我們轉發給在8080端口的tomcat,由它來處理真正的請求,當請求完成后,tomcat返回,但數據此時沒直接返回,而是直接給nginx,由nginx進行返回,這里,我們會以為是nginx進行了處理,但實際上進行處理的是tomcat。說到上面的方式,也許很多人又會想起來,這樣可以把靜態文件交由nginx來進行處理。對,很多用到nginx的地方都是作為靜態伺服器,這樣可以方便緩存那些靜態文件,比如CSS,JS,html,htm等文件。閑話就不多說了,我們直接來看看nginx怎么使用。
新聞熱點
疑難解答