Web Server 與 App Server


Web Server

  常見的Web Server有Apache Server與Nginx。

  Apache Http Server是Apache軟件基金會下的一個項目,是一款開源的HTTP服務器軟件(它也可以作為郵件代理服務器、通用的TCP代理服務器)。

  Nginx之前有配置它的博文,大多數用它來做負載均衡。

  這兩者基本相同,HTTP服務器本質上也是一種應用程序——通常運行在服務器之上,綁定服務器的IP地址並監聽某一個tcp端口來接收並處理HTTP請求,這樣客戶端(各種瀏覽器)就能夠通過HTTP協議來獲取服務器上的網頁(HTML格式)、文檔(PDF格式)、音頻(MP4格式)、視頻(MOV格式)包括CSS、JS等等資源。下圖描述的就是這一過程:

  Web Server一般至於企業防火牆之外,這個防火牆可以認為是一個路由器,然后再CISCO路由器上開放了兩個端口為:80和443。其中80端口用於正常的http訪問。443端口用於https訪問,即如果你在瀏覽器中輸入https://www.xxx.com這樣的地址,默認走的是443這個端口。
總而言之,Web Server起到了占用服務器端口和只能解析一些靜態文件的作用。

  一個HTTP Server關心的是HTTP協議層面的傳輸和訪問控制,所以在Apache/Nginx上你可以看到代理、負載均衡等功能。客戶端通過HTTP Server訪問服務器上存儲的資源(HTML文件、圖片文件等等)。通過CGI技術,也可以將處理過的內容通過HTTP Server分發,但是一個HTTP Server始終只是把服務器上的文件如實的通過HTTP協議傳輸給客戶端。

App Server

  其至於企業防火牆之內,它和Web Server之間的連接必須且一定為內部IP連接。外部IP:即Internet IP地址,我們的Web服務器一般會有一個內部IP和一個外部IP,因此在這里,我們的App Server沒有任何外部IP,只有內部IP,所以我們在這里說App Server與Web Server只能以內部IP形式連接。比如說我們用的App Server是Tomcat,它的端口為8080,那么這個IP地址上的8080端口只能由任何內部IP才能訪問,外部的Internet是訪問不了的,這樣做就是為了安全!

  App Server用於解析我們的任何需要Java編譯器才能解析的“動態”網頁,其實App Server本身也能解析任何靜態網頁的。

  Apache HTTP Server和Nginx本身不支持生成動態頁面,但它們可以通過其他模塊來支持(例如通過Shell、PHP、Python腳本程序來動態生成內容)。
如果想要使用Java程序來動態生成資源內容,使用這一類HTTP服務器很難做到。Java Servlet技術以及衍生的Java Server Pages技術可以讓Java程序也具有處理HTTP請求並且返回內容(由程序動態控制)的能力,Tomcat正是支持運行Servlet/JSP應用程序的容器(Container):

  Tomcat是Apache軟件基金會下的另一個項目,與Apache HTTP Server相比,Tomcat能夠動態的生成資源並返回到客戶端。Apache HTTP Server和Nginx都能夠將某一個文本文件的內容通過HTTP協議返回到客戶端,但是這個文本文件的內容是固定的——也就是說不能和網頁進行一些交互,只能做簡單的頁面跳轉,比如:包含顯示當前時間的頁面;顯示當前IP地址的頁面;

  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 Server,又要有App Server?

  我們可以讓專門負責解析靜態網頁的Web Server來解析HTML等內容,而讓App Server專門用於解析任何需要Java編譯器才能解析的東西,讓它們“兩人”各司其職。
  這樣的好處:

  1. 為App Server“減壓”,同時也提高了performance(性能)。
  2. 不用再把8080這個端口暴露在Internet上了,這樣很安全;-),畢竟App Server上是有我們的代碼的,就算是編譯過的代碼class文件,也是容易被“反編譯”的。
  3. 這也為將來的進一步的“集群擴展”打好了基礎。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM