Apache 、Nginx 、Squid 的區別

一、Apache:

Apache 是一個優秀的開放源碼的網頁服務器,第一款web服務器端軟件。但對於那些需要更強大的Web應用服務器(比如大小、可定製、響應速度、可擴展性等方面)的人而言,Apache明顯不符合他們的要求,同類替代軟件有Lighttpd,Nginx,kangle,Boa,Jigsaw等。

二、Squid:

Squid是一個緩存Internet 數據的軟件,其接收用戶的下載申請,並自動處理所下載的數據。當一個用戶想要下載一個主頁時,可以向Squid 發出一個申請,要Squid 代替其進行下載,然後Squid 連接所申請網站並請求該主頁,接着把該主頁傳給用戶同時保留一個備份,當別的用戶申請同樣的頁面時,Squid 把保存的備份立即傳給用戶,使用戶覺得速度相當快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等協議並且Squid 可以自動地進行處理,可以根據自己的需要設置Squid,使之過濾掉不想要的東西。

(1)工作流程

當代理服務器中有客戶端需要的數據時:

  1. 客戶端向代理服務器發送數據請求;
  2. 代理服務器檢查自己的數據緩存;
  3. 代理服務器在緩存中找到了用戶想要的數據,取出數據;
  4. 代理服務器將從緩存中取得的數據返回給客戶端。

當代理服務器中沒有客戶端需要的數據時:

  1. 客戶端向代理服務器發送數據請求;
  2. 代理服務器檢查自己的數據緩存;
  3. 代理服務器在緩存中沒有找到用戶想要的數據;
  4. 代理服務器向Internet 上的遠端服務器發送數據請求;
  5. 遠端服務器響應,返回相應的數據;
  6. 代理服務器取得遠端服務器的數據,返回給客戶端,並保留一份到自己的數據緩存中。

(2)Squid 分類

按照代理類型的不同,可以將Squid 代理分爲正向代理和反向代理,正向代理中,根據實現方式的不同,又可以分爲普通代理和透明代理。

1、普通代理:需要客戶機在瀏覽器中指定代理服務器的地址、端口;

2、透明代理:適用於企業的網關主機(共享接入Internet)中,客戶機不需要指定代理服務器地址、端口等信息,代理服務器需要設置防火牆策略將客戶機的Web訪問數據轉交給代理服務程序處理;

3、反向代理:是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

三、Nginx:

Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。
其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好.中國大陸使用nginx網站用戶有:新浪、網易、騰訊、小米官網等。

四、三者比較:

(1) squid 與 apache:

apache服務器是用來發布web網站的服務器,而squid代理服務器是用於代理局域網內的計算機連接互聯網 ,即squid正向代理;apache是被squid代理的。在squid代理下的apache其他人是看不到其真正的IP地址,增加安全性。squid還能用於分擔網絡壓力的用途,比如多個apache服務器同時分擔工作的時候就由squid分配工作,即squid的反向代理。

(2)nginx 和 squid 的反向代理的區別:

二者都可以做反向代理;但是,nginx是異步模式,squid是同步模式。

反向代理從傳輸上可以區分爲同步模式和異步模式,apache的mod_proxy和squid都屬於同步模式,nginx和lighttpd屬於異步模式

1、同步模式是用戶發起請求,請求立即被轉到後端的服務器,於是在瀏覽器和後端服務器之間就建立了一個連接,在請求完成前這個連接是一直存在的。

2、而異步模式時,用戶發起的請求會發送到nginx,nginx接收到所有的數據後在轉發到後端的服務器,後端服務器處理完成後把數據返回給nginx,nginx在返回給用戶。

由此可見如果用戶發起的請求的數據比較大,或者用戶端的網速比較慢,同步模式時後端服務器的連接數相對於異步模式會比較多,壓力也比較大。

(3) apache 與 tomcat :

Apache 和 Tomcat 都是web網絡服務器,兩者既有聯繫又有區別,在進行HTML、PHP、JSP、Perl等開發過程中,需要準確掌握其各自特點,選擇最佳的服務器配置。

1、Apache是web服務器(靜態解析,如HTML),tomcat是java應用服務器(動態解析,如JSP、PHP)

2、Tomcat只是一個servlet(jsp也翻譯成servlet)容器,可以認爲是apache的擴展,但是可以獨立於apache運行。

相同點:

1、兩者都是apache組織開發的

2、兩者都有HTTP服務的功能

3、兩者都是開源免費的

二者聯繫:

1)Apache是普通服務器,本身只支持html即普通網頁,可以通過插件支持php,還可以與Tomcat連通(Apache單向連接Tomcat,就是說通過Apache可以訪問Tomcat資源,反之不然)。

2)Apache只支持靜態網頁,但像asp、jsp、php、cgi等動態網頁就需要Tomcat來處理。

3)Apache和Tomcat整合使用:

如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求;
如果客戶端請求動態頁面,則是Tomcat服務器響應請求,將解析的JSP等網頁代碼解析後回傳給Apache服務器,再經Apache返回給瀏覽器端。

這是因爲jsp是服務器端解釋代碼的,Tomcat只做動態代碼解析,Apache回傳解析好的靜態代碼,Apache+Tomcat這樣整合就可以減少Tomcat的服務開銷。

4)Apache和Tomcat是獨立的,在同一臺服務器上可以集成。

二者區別:

Apache是有C語言實現的,支持各種特性和模塊從而來擴展核心功能;Tomcat是Java編寫的,更好的支持Servlet和JSP。

1、Apache是Web服務器,Web服務器傳送(serves)頁面使瀏覽器可以瀏覽,Web服務器專門處理HTTP請求(request),但是應用程序服務器是通過很多協議來爲應用程序提供 (serves)商業邏輯(business logic)。

Tomcat是運行在Apache上的應用服務器,應用程序服務器提供的是客戶端應用程序可以調用(call)的方法 (methods)。它只是一個servlet(jsp也翻譯成servlet)容器,可以認爲是Apache的擴展,但是可以獨立於apache運行。

2、Apache是普通服務器,本身只支持html靜態普通網頁。不過可以通過插件支持PHP,還可以與Tomcat連通(單向Apache連接Tomcat,就是說通過Apache可以訪問Tomcat資源,反之不然),Tomcat是jsp/servlet容器,同時也支持HTML、JSP、ASP、PHP、CGI等,其中CGI需要一些手動調試,不過很容易的。

3、Apache側重於http server,Tomcat側重於servlet引擎,如果以standalone方式運行,功能上Tomcat與apache等效支持JSP,但對靜態網頁不太理想。

4、Apache可以運行一年不重啓,穩定性非常好,而Tomcat則不見得。

5、首選web服務器是Apache,但Apache解析不了的jsp、servlet才用tomcat。

6、Apache是很最開始的頁面解析服務,tomcat是後研發出來的,從本質上來說tomcat的功能完全可以替代Apache,但Apache畢竟是tomcat的前輩級人物,並且市場上也有不少人還在用Apache,所以Apache還會繼續存在,不會被取代,apache不能解析java的東西,但解析html速度快。

例如:
  Apache是一輛車,上面可以裝一些東西如html等,但是不能裝水,要裝水必須要有容器(桶),而這個桶也可以不放在卡車上,那這個桶就是 Tomcat。

如何整合二者:

Apache是一個web服務器環境程序,啓用他可以作爲web服務器使用不過只支持靜態網頁,不支持動態網頁,如asp、jsp、php、cgi

如果要在Apache環境下運行jsp就需要一個解釋器來執行jsp網頁,而這個jsp解釋器就是Tomcat

那爲什麼還要JDK呢?因爲jsp需要連接數據庫的話就要jdk來提供連接數據庫的驅程,所以要運行jsp的web服務器平臺就需要APACHE+TOMCAT+JDK 。

如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求;
如果客戶端請求動態頁面,則是Tomcat服務器響應請求;
因爲jsp是服務器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷。
————————————————
版權聲明:本文爲CSDN博主「Benny-文俊」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_45409371/article/details/103404012

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章