Web服務器 - apache & nginx & tomact

Web服務器 - apache & nginx & tomact

HTTP Server本質上來講都是這樣幾件事:javascript

  1. 監聽端口
  2. 接收(accept)socket鏈接
  3. 解析HTTP請求
  4. 使用通用或專用協議對請求進行分發
  5. 接收分發的請求產生的運行結果
  6. 將結果格式化成HTTP Response並寫到socket裏面
  7. 關閉鏈接或者Keep-Alive

區別一方面在於用了什麼語言來實現(Tomcat用Java),一方面是分發時支持的具體協議,Tomcat只支持Servlet接口,Apache和nginx支持CGI、FastCGI、反向代理(能夠認爲是用HTTP協議進行HTTP請求的分發)、靜態資源(能夠認爲是分發到磁盤讀寫)等,還能夠用擴展模塊支持其餘分發方式(好比WSGI)php



Web Server 的概念太寬泛了。
嚴格的來講,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 協議傳輸給客戶端。java

而應用服務器,則是一個應用執行的容器。它首先須要支持開發語言的 Runtime(對於 Tomcat 來講,就是 Java),保證應用可以在應用服務器上正常運行。其次,須要支持應用相關的規範,例如類庫、安全方面的特性。對於 Tomcat 來講,就是須要提供 JSP/Sevlet 運行須要的標準類庫、Interface 等。爲了方便,應用服務器每每也會集成 HTTP Server 的功能,可是不如專業的 HTTP Server 那麼強大,因此應用服務器每每是運行在 HTTP Server 的背後,執行應用,將動態的內容轉化爲靜態的內容以後,經過 HTTP Server 分發到客戶端。
 

1.     Apache

Apache HTTP服務器是一個模塊化的服務器,能夠運行在幾乎全部普遍使用的計算機平臺上。其屬於應用服務器。Apache支持支持模塊多,性能穩定,Apache自己是靜態解析,適合靜態HTML、圖片等,但能夠經過擴展腳本、模塊等支持動態頁面等。nginx

(Apche能夠支持PHPcgiperl,可是要使用Java的話,你須要Tomcat在Apache後臺支撐,將Java請求由Apache轉發給Tomcat處理。)web

缺點:配置相對複雜,自身不支持動態頁面。數據庫

2.     Tomcat:

Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,能夠認爲是Apache的擴展,可是能夠獨立於Apache運行。apache

3.     Nginx

Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲「engine X」,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。後端

 

2、     比較

1.     Apache與Tomcat的比較

相同點:瀏覽器

l  二者都是Apache組織開發的

l  二者都有HTTP服務的功能

l  二者都是免費的

不一樣點:

l  Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等),而Tomcat是Apache組織在符合Java EE的JSP、Servlet標準下開發的一個JSP服務器. 

l  Apache是一個Web服務器環境程序,啓用他能夠做爲Web服務器使用,不過只支持靜態網頁如(ASP,PHP,CGI,JSP)等動態網頁的就不行。若是要在Apache環境下運行JSP的話就須要一個解釋器來執行JSP網頁,而這個JSP解釋器就是Tomcat。

l  Apache:側重於HTTPServer ,Tomcat:側重於Servlet引擎,若是以Standalone方式運行,功能上與Apache等效,支持JSP,但對靜態網頁不太理想;

l  Apache是Web服務器,Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,能夠認爲是Apache的擴展,可是能夠獨立於Apache運行。

實際使用中Apache與Tomcat經常是整合使用:

l  若是客戶端請求的是靜態頁面,則只須要Apache服務器響應請求。

l  若是客戶端請求動態頁面,則是Tomcat服務器響應請求。

l  由於JSP是服務器端解釋代碼的,這樣整合就能夠減小Tomcat的服務開銷。

能夠理解Tomcat爲Apache的一種擴展。

2.     Nginx與Apache比較

1)     nginx相對於apache的優勢

l  輕量級,一樣起web 服務,比apache佔用更少的內存及資源 

l  抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能 

l  高度模塊化的設計,編寫模塊相對簡單 

l  提供負載均衡

l  社區活躍,各類高性能模塊出品迅速

2)     apache 相對於nginx 的優勢

l apache的 rewrite 比nginx 的強大 ;

l 支持動態頁面;

l 支持的模塊多,基本涵蓋全部應用;

l 性能穩定,而nginx相對bug較多。

3)     二者優缺點比較

l Nginx 配置簡潔, Apache 複雜 ;

l Nginx 靜態處理性能比 Apache 高 3倍以上 ;

l Apache 對 PHP 支持比較簡單,Nginx 須要配合其餘後端用;

l Apache 的組件比 Nginx 多 ;

l  apache是同步多進程模型,一個鏈接對應一個進程;nginx是異步的,多個鏈接(萬級別)能夠對應一個進程;

l nginx處理靜態文件好,耗費內存少;

l  動態請求由apache去作,nginx只適合靜態和反向;

l Nginx適合作前端服務器,負載性能很好;

l Nginx自己就是一個反向代理服務器 ,且支持負載均衡

3.     總結

l Nginx優勢:負載均衡、反向代理、處理靜態文件優點。nginx處理靜態請求的速度高於apache;

l Apache優勢:相對於Tomcat服務器來講處理靜態文件是它的優點,速度快。Apache是靜態解析,適合靜態HTML、圖片等。

l Tomcat:動態解析容器,處理動態請求,是編譯JSP\Servlet的容器,Nginx有動態分離機制,靜態請求直接就能夠經過Nginx處理,動態請求才轉發請求到後臺交由Tomcat進行處理。

 

 

Apache在處理動態有優點,Nginx併發性比較好,CPU內存佔用低,若是rewrite頻繁,那仍是Apache較適合。

 

反向代理的理解:

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,

並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器


1、apache與nginx的區別:
 
        一、兩者最核心的區別在於apache是同步多進程模型,一個鏈接對應一個進程;nginx是異步的,多個鏈接(萬級別)能夠對應一個進程 。nginx處理靜態文件好,耗費內存少.但無疑apache仍然是目前的主流,有不少豐富的特性.因此還須要搭配着來.固然若是能肯定nginx就適合需求,那麼使用nginx會是更經濟的方式。

 

        二、nginx的負載能力比apache高不少。最新的服務器也改用nginx了。並且nginx改完配置能-t測試一下配置有沒 有問題。

 

        三、apache重啓的時候發現配置出錯了,會很崩潰,改的時候都會很是當心翼翼如今看有好多集羣站,前端nginx抗併發,後端apache集羣, 配合的也不錯。

 

        四、nginx處理動態請求是雞肋,通常動態請求要apache去作,nginx只適合靜態和反向。 

 

        五、從經驗來看,nginx是很不錯的前端服務器,負載性能很好,nginx,用webbench模擬10000個靜態文件請求絕不吃力。 apache對php等語言的支持很好,此外apache有強大的支持網絡,發展時間相對nginx更久,bug少可是apache有先天不支持多核心處理負載雞肋的缺點,建議使用nginx作前端,後端用apache。大型網站建議用nginx自代的集羣功能。

 

       六、大部分狀況下nginx都優於APACHE,好比說靜態文件處理、PHP-CGI的支持、反向代理功能、前端 Cache、維持鏈接等等。在Apache+PHP(prefork)模式下,若是PHP處理慢或者前端壓力很大的狀況下,很容易出現Apache進程數 飆升,從而拒絕服務的現象。

 

        七、Apache在處理動態有優點,Nginx併發性比較好,CPU內存佔用低,若是rewrite頻繁,那仍是Apache吧!

 

        八、通常來講,須要性能的web 服務,用nginx 。若是不須要性能只求穩定,那就apache 吧。

 

2、apache與nginx優缺點比較
 

一、nginx相對於apache的優勢: 

輕量級,一樣web 服務,比apache 佔用更少的內存及資源 ;
       抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能 ;
       高度模塊化的設計,編寫模塊相對簡單 ;
       社區活躍,各類高性能模塊出品迅速啊 ;
      Nginx自己就是一個反向代理服務器 ,Nginx支持7層負載均衡;Nginx可能會比apache支持更高的併發,
      nginx配置文件寫的很簡潔,正則配置讓不少事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合作前端響應服務器 !




二、apache 相對於nginx 的優勢: 

rewrite ,比nginx 的rewrite 強大 ;
       模塊超多,基本想到的均可以找到 ;
       少bug ,nginx 的bug 相對較多 ;
       超穩定 ,Aapche依然是大部分公司的首先,由於其成熟的技術和開發社區已經 也是很是不錯的性能。




  3、爲何如今 Nginx 纔是 Web 服務器的首選 

做爲 Web 服務器:相比 Apache,Nginx 使用更少的資源,支持更多的併發鏈接,體現更高的效率,這點使 Nginx 尤爲受到虛擬主機提供商的歡迎。在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是作虛擬主機生意的老闆們常常選擇的軟件平臺之一. 可以支持高達 50,000 個併發鏈接數的響應, 感謝Nginx爲咱們選擇了 epoll and kqueue 做爲開發模型. 
       Nginx做爲負載均衡服務器: Nginx 既能夠在內部直接支持 Rails 和 PHP 程序對外進行服務, 也能夠支持做爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不管是系統資源開銷仍是CPU使用效率都比 Perlbal 要好不少. 

        做爲郵件代理服務器: Nginx 同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器), Last.fm 描述了成功而且美妙的使用經驗. 

       Nginx 是一個安裝很是的簡單 , 配置文件很是簡潔(還可以支持perl語法), Bugs 很是少的服務器: Nginx 啓動特別容易, 而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動. 你還可以不間斷服務的狀況下進行軟件版本的升級 . 

         Nginx 配置簡潔, Apache 複雜 , Nginx 靜態處理性能比 Apache 高 3倍以上 , Apache 對 PHP 支持比較簡單,Nginx 須要配合其餘後端用,   Apache 的組件比 Nginx 多 。    如今 Nginx 纔是 Web 服務器的首選
 

經常使用的web服務器軟件整理

 

(1)ApacheApache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上。Apache源於NCSAhttpd服務器,通過屢次修改,成爲世界上最流行的Web服務器軟件之一。Apache取自"a patchy server"的讀音,意思是充滿補丁的服務器,由於它是自由軟件,因此不斷有人來爲它開發新的功能、新的特性、修改原來的缺陷。Apache的特色是簡單、速度快、性能穩定,並可作代理服務器來使用。


(2)IIS是英文Internet Information Server的縮寫,譯成中文就是"Internet信息服務"的意思。它是微軟公司主推的服務器,最新的版本是Windows2008裏面包含的IIS 7,IIS與Window Server徹底集成在一塊兒,於是用戶可以利用Windows Server和NTFS(NT File System,NT的文件系統)內置的安全特性,創建強大,靈活而安全的Internet和Intranet站點。


(3)GFEGoogle的web服務器,用戶數量激增。目前緊逼iis。


(4)Nginx不只是一個小巧且高效的HTTP服務器,也能夠作一個高效的負載均衡反向代理,經過它接受用戶的請求並分發到多個Mongrel進程能夠極大提升Rails應用的併發能力。


(5)Lighttpd是由德國人 Jan Kneschke 領導開發的,基於BSD許可的開源WEB服務器軟件,其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好而且靈活的web server環境。具備很是低的內存開銷,CPU佔用率低,效能好,以及豐富的模塊等特色。Lighttpd 是衆多OpenSource輕量級的web server中較爲優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能。


(6)Zeus是一個運行於Unix下的很是優秀的Web Server,聽說性能超過Apache,是效率最高的Web Server之一。


(7)Sun的Java系統Web服務器也就是之前的Sun ONE Web Server。主要出如今那些運行Sun的Solaris操做系統的關鍵任務級Web服務器上。它最新的版本號是6.1,能夠支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至能夠支持Windows,但它的大多數用戶都選擇了SPARC版本的Solaris操做系統。


(8)Resin提供了最快的jsp/servlets運行平臺。在java和javascript的支持下,Resin能夠爲任務靈活選用合適的開發語言。Resin的一種先進的語言XSL(XML stylesheet language)可使得形式和內容相分離。


(9)Jetty是一個開源的servlet容器,它爲基於Java的web內容,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發佈。開發人員能夠將Jetty容器實例化成一個對象,能夠迅速爲一些獨立運行(stand-alone)的Java應用提供網絡和web鏈接。


(10)BEA WebLogic是用於開發、集成、部署和管理大型分佈式Web應用、網絡應用和數據庫應用的Java應用服務器。將Java的動態功能和Java Enterprise標準的安全性引入大型網絡應用的開發、集成、部署和管理之中。 BEA WebLogic Server擁有處理關鍵Web應用系統問題所需的性能、可擴展性和高可用性。


(11)Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其餘一些公司及我的共同開發而成。因爲有了Sun 的參與和支持,最新的Servlet 和JSP 規範老是能在Tomcat 中獲得體現。由於Tomcat 技術先進、性能穩定,並且免費,於是深受Java 愛好者的喜好並獲得了部分軟件開發商的承認,成爲目前比較流行的Web 應用服務器。

 

(12)Node.js是一個Javascript運行環境(runtime)。實際上它是對Chrome V8引擎進行了封裝。V8引 擎執行Javascript的速度很是快,性能很是好。Node.js對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下運行得更好。 Node.js是一個基於Chrome JavaScript運行時創建的平臺, 用於方便地搭建響應速度快、易於擴展的網絡應用。Node.js 使用事件驅動, 非阻塞I/O模型而得以輕量和高效,很是適合在分佈式設備上運行數據密集型的實時應用。

相關文章
相關標籤/搜索