tomcat 與 nginx,apache的區(qū)別是什么舞吭?
這三者都是web server泡垃,那他們各自有什么特點呢?他們之間的區(qū)別是什么呢羡鸥?
nginx 和 tomcat在性能上面有何異同蔑穴。
tomcat用在java后臺程序上,java后臺程序難道不能用apache和nginx嗎惧浴?
轉(zhuǎn)載
題主說的Apache存和,指的應(yīng)該是Apache軟件基金會下的一個項目——Apache HTTP Server Project;Nginx同樣也是一款開源的HTTP服務(wù)器軟件(當然它也可以作為郵件代理服務(wù)器衷旅、通用的TCP代理服務(wù)器)捐腿。
HTTP服務(wù)器本質(zhì)上也是一種應(yīng)用程序——它通常運行在服務(wù)器之上,綁定服務(wù)器的IP地址并監(jiān)聽某一個tcp端口來接收并處理HTTP請求柿顶,這樣客戶端(一般來說是IE, Firefox茄袖,Chrome這樣的瀏覽器)就能夠通過HTTP協(xié)議來獲取服務(wù)器上的網(wǎng)頁(HTML格式)、文檔(PDF格式)嘁锯、音頻(MP4格式)宪祥、視頻(MOV格式)等等資源聂薪。下圖描述的就是這一過程:
不僅僅是Apache HTTP Server和Nginx,絕大多數(shù)編程語言所包含的類庫中也都實現(xiàn)了簡單的HTTP服務(wù)器方便開發(fā)者使用:
HttpServer (Java HTTP Server )
使用這些類庫能夠非常容易的運行一個HTTP服務(wù)器蝗羊,它們都能夠通過綁定IP地址并監(jiān)聽tcp端口來提供HTTP服務(wù)胆建。
Apache Tomcat則是Apache基金會下的另外一個項目,與Apache HTTP Server相比肘交,Tomcat能夠動態(tài)的生成資源并返回到客戶端。Apache HTTP Server和Nginx都能夠?qū)⒛骋粋€文本文件的內(nèi)容通過HTTP協(xié)議返回到客戶端扑馁,但是這個文本文件的內(nèi)容是固定的——也就是說無論何時涯呻、任何人訪問它得到的內(nèi)容都是完全相同的,這樣的資源我們稱之為靜態(tài)資源腻要。動態(tài)資源則與之相反复罐,在不同的時間、不同的客戶端訪問得到的內(nèi)容是不同的雄家,例如:
包含顯示當前時間的頁面
顯示當前IP地址的頁面
Apache HTTP Server和Nginx本身不支持生成動態(tài)頁面效诅,但它們可以通過其他模塊來支持(例如通過Shell、PHP趟济、Python腳本程序來動態(tài)生成內(nèi)容)乱投。
如果想要使用Java程序來動態(tài)生成資源內(nèi)容,使用這一類HTTP服務(wù)器很難做到顷编。Java Servlet技術(shù)以及衍生的Java Server Pages技術(shù)可以讓Java程序也具有處理HTTP請求并且返回內(nèi)容(由程序動態(tài)控制)的能力戚炫,Tomcat正是支持運行Servlet/JSP應(yīng)用程序的容器(Container):
Tomcat運行在JVM之上,它和HTTP服務(wù)器一樣媳纬,綁定IP地址并監(jiān)聽TCP端口双肤,同時還包含以下指責:
管理Servlet程序的生命周期
將URL映射到指定的Servlet進行處理
與Servlet程序合作處理HTTP請求——根據(jù)HTTP請求生成HttpServletResponse對象并傳遞給Servlet進行處理,將Servlet中的HttpServletResponse對象生成的內(nèi)容返回給瀏覽器
雖然Tomcat也可以認為是HTTP服務(wù)器钮惠,但通常它仍然會和Nginx配合在一起使用:
動靜態(tài)資源分離——運用Nginx的反向代理功能分發(fā)請求:所有動態(tài)資源的請求交給Tomcat茅糜,而靜態(tài)資源的請求(例如圖片、視頻素挽、CSS蔑赘、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力毁菱。
負載均衡米死,當業(yè)務(wù)壓力增大時,可能一個Tomcat的實例不足以處理贮庞,那么這時可以啟動多個Tomcat實例進行水平擴展峦筒,而Nginx的負載均衡功能可以把請求通過算法分發(fā)到各個不同的實例進行處理