做者:知乎用戶
連接:https://www.zhihu.com/questio...
來源:知乎算法
Apache,指的是Apache軟件基金會下的一個項目——Apache HTTP Server Project;Nginx一樣也是一款開源的HTTP服務器軟件(固然它也能夠做爲郵件代理服務器、通用的TCP代理服務器)。
HTTP服務器本質上也是一種應用程序——它一般運行在服務器之上,綁定服務器的IP地址並監聽某一個tcp端口來接收並處理HTTP請求,這樣客戶端(通常來講是IE, Firefox,Chrome這樣的瀏覽器)就可以經過HTTP協議來獲取服務器上的網頁(HTML格式)、文檔(PDF格式)、音頻(MP4格式)、視頻(MOV格式)等等資源。
下圖描述的就是這一過程:
不單單是Apache HTTP Server和Nginx,絕大多數編程語言所包含的類庫中也都實現了簡單的HTTP服務器方便開發者使用:HttpServer (Java HTTP Server )Python SimpleHTTPServer使用這些類庫可以很是容易的運行一個HTTP服務器,它們都可以經過綁定IP地址並監聽tcp端口來提供HTTP服務。
Apache Tomcat則是Apache基金會下的另一個項目,與Apache HTTP Server相比,Tomcat可以動態的生成資源並返回到客戶端。Apache HTTP Server和Nginx都可以將某一個文本文件的內容經過HTTP協議返回到客戶端,可是這個文本文件的內容是固定的——也就是說不管什麼時候、任何人訪問它獲得的內容都是徹底相同的,這樣的資源咱們稱之爲靜態資源。
動態資源則與之相反,在不一樣的時間、不一樣的客戶端訪問獲得的內容是不一樣的,例如:包含顯示當前時間的頁面顯示當前IP地址的頁面Apache HTTP Server和Nginx自己不支持生成動態頁面,但它們能夠經過其餘模塊來支持(例如經過Shell、PHP、Python腳本程序來動態生成內容)。若是想要使用Java程序來動態生成資源內容,使用這一類HTTP服務器很難作到。Java Servlet技術以及衍生的Java Server Pages技術可讓Java程序也具備處理HTTP請求而且返回內容(由程序動態控制)的能力,Tomcat正是支持運行Servlet/JSP應用程序的容器(Container):Tomcat運行在JVM之上,它和HTTP服務器同樣,綁定IP地址並監聽TCP端口,同時還包含如下指責:編程
雖然Tomcat也能夠認爲是HTTP服務器,但一般它仍然會和Nginx配合在一塊兒使用:動靜態資源分離——運用Nginx的反向代理功能分發請求:全部動態資源的請求交給Tomcat,而靜態資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力。負載均衡,當業務壓力增大時,可能一個Tomcat的實例不足以處理,那麼這時能夠啓動多個Tomcat實例進行水平擴展,而Nginx的負載均衡功能能夠把請求經過算法分發到各個不一樣的實例進行處理。瀏覽器