一、服務器和主機
當用作網絡服務的機子時叫服務器。必須具有承擔服務并且保障服務的能力,為其他網絡設備提供網絡服務。
最簡單的一句話:主機和服務器是相對而言的。 專業(yè)的服務器的配置是很高的,不過本身從硬件上來說還是電腦主機,當用作網絡服務時就叫服務器了。
主機一般是指個人使用的電腦PC機。服務器一般是指用于專業(yè)用的電腦PC機,在實質上,服務器和主機沒有什么意義上的區(qū)別。主機如果做為服務器也是可以的,服務器也可以當個人主機用。 然而我們平時要做為真正的服務器來使用時(一般是企業(yè))。服務器的硬件要求要比普通的個人PC要求要高的多。比如WEB服務器,要24小時不能離線。所以在散熱,耐熱等方面就比普通PC要高很多。
其實服務器的模樣就和電腦的主機很相似,但是服務器是網站的靈魂,是打開網站的必要載體,沒有服務器的網站用戶無法瀏覽。比如我們每天瀏覽的網站,其實數(shù)據(jù)均在服務器,服務器一般都在一些IDC數(shù)據(jù)中心機房以及電信等網絡大廈里面。
服務器是網絡環(huán)境中的高性能計算機,它偵聽網絡上的其他計算機(客戶機)提交的服務請求,并提供相應的服務,為此,服務器必須具有承擔服務并且保障服務的能力。我們這里提到的服務器,主要是指的Web服務器,我們也稱之為專用服務器,是專為網站業(yè)務應用的服務器,這種服務器可以向發(fā)出請求的瀏覽器提供文檔的程序。Web服務器也是一種被動的程序,只有當服務器接收到瀏覽器發(fā)出的請求時,服務器才會響應。
二、代理服務器
形象的說:它是網絡信息的中轉站。代理服務器就好象一個大的Cache,這樣就能顯著提高瀏覽速度和效率。更重要的是:Proxy Server(代理服務器)是Internet鏈路級網關所提供的一種重要的安全功能
- 通俗的例子:比如你家的門壞了,不能走出屋子,你只能借助你家后門并且通過鄰居家的門走出屋子。完成這樣一個目的,就等于說是借助其他通道到達你想要到達的目的地。
代理服務器也一樣,比如本地網絡無法直接訪問一些網站或者服務器,必須通過一個代理點服務器,那個服務器和你的本地網絡是可以直接ping的通的,然后你就必須設置這個代理服務器的一些參數(shù),比如ip,端口,然后通過這個平臺連接到其他網絡區(qū)域。
提供代理服務的電腦系統(tǒng)或其它類型的網絡終端稱為代理服務器(英文:Proxy Server)。一個完整的代理請求過程為:客戶端首先與代理服務器創(chuàng)建連接,接著根據(jù)代理服務器所使用的代理協(xié)議,請求對目標服務器創(chuàng)建連接、或者獲得目標服務器的指定資源(如:文件)。
三、反向代理服務器
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發(fā)給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現(xiàn)為一個反向代理服務器。
其實代理和反向代理只是針對不同的對象而言,對于客戶機發(fā)出請求來說就是代理,對于客戶機收到服務端的響應而言就是反向代理
四、代理服務器與反向代理服務器的區(qū)別
代理服務器與反向代理服務器的區(qū)別講得比較清楚
代理服務器通常分為兩類
- 即轉發(fā)代理(forward proxy)服務器
- 反向代理(reverse proxy)服務器。
- 轉發(fā)代理服務器又通常簡稱為代理服務器,我們常提到的代理服務器就指的是轉發(fā)代理服務器。
兩者區(qū)別
兩者的相同點在于都是用戶和服務器之間的中介,完成用戶請求和結果的轉發(fā)。主要的不同在于:
(1)轉發(fā)代理的內部是客戶端,而反向代理的內部是服務器。即內網的客戶端通過轉發(fā)代理服務器訪問外部網絡,而外部的用戶通過反向代理訪問內部的服務器。
(2)轉發(fā)代理通常接受客戶端發(fā)送的任何請求,而反向代理通常只接受到指定服務器的請求。如校園網內部用戶可以通過轉發(fā)代理訪問國外的任何站點(如果不加限制的話),而只有特定的請求才發(fā)往反向代理,然后又反向代理發(fā)往內部服務器。
五、Nginx
Nginx ("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。
六、Apache與Nginx的優(yōu)缺點比較
知乎-Nginx 和 Apache 各有什么優(yōu)缺點?
從我個人的經驗來看,nginx是很不錯的前端服務器,負載性能很好,在老奔上開nginx,用webbench模擬10000個靜態(tài)文件請求毫不吃力。
apache對php等語言的支持很好,此外apache有強大的支持網路,發(fā)展時間相對nginx更久,bug少。但是apache有先天不支持多核心處理負載雞肋的缺點
建議使用nginx做前端,後端用apache。大型網站建議用nginx自代的集群功能。Nginx處理動態(tài)請求是雞肋,一般動態(tài)請求要apache去做,nginx只適合靜態(tài)和反向。
- Nginx 配置簡潔, Apache 復雜
- Nginx 靜態(tài)處理性能比 Apache 高 3倍以上
- Apache 對 PHP 支持比較簡單,Nginx 需要配合其他后端用
- Apache 的組件比 Nginx 多
知乎-tomcat 與 nginx,apache的區(qū)別是什么?
HTTP服務器本質上也是一種應用程序——它通常運行在服務器之上,綁定服務器的IP地址并監(jiān)聽某一個tcp端口來接收并處理HTTP請求,這樣客戶端(一般來說是IE, Firefox,Chrome這樣的瀏覽器)就能夠通過HTTP協(xié)議來獲取服務器上的網頁(HTML格式)、文檔(PDF格式)、音頻(MP4格式)、視頻(MOV格式)等等資源。
是Apache HTTP Server和Nginx,絕大多數(shù)編程語言所包含的類庫中也都實現(xiàn)了簡單的HTTP服務器方便開發(fā)者使用。
HttpServer (Java HTTP Server )
使用這些類庫能夠非常容易的運行一個HTTP服務器,它們都能夠通過綁定IP地址并監(jiān)聽tcp端口來提供HTTP服務。
Tomcat:與Apache HTTP Server相比,Tomcat能夠動態(tài)的生成資源并返回到客戶端。
Apache HTTP Server和Nginx都能夠將某一個文本文件的內容通過HTTP協(xié)議返回到客戶端,但是這個文本文件的內容是固定的。這個文本文件的內容是固定的——也就是說無論何時、任何人訪問它得到的內容都是完全相同的,這樣的資源我們稱之為靜態(tài)資源。
Apache HTTP Server和Nginx本身不支持生成動態(tài)頁面,但它們可以通過其他模塊來支持(例如通過Shell、PHP、Python腳本程序來動態(tài)生成內容)。
如果想要使用Java程序來動態(tài)生成資源內容,Java Servlet技術以及衍生的Java Server Pages技術可以讓Java程序也具有處理HTTP請求并且返回內容(由程序動態(tài)控制)的能力,Tomcat正是支持運行Servlet/JSP應用程序的容器(Container):
Tomcat運行在JVM之上,它和HTTP服務器一樣,綁定IP地址并監(jiān)聽TCP端口
雖然Tomcat也可以認為是HTTP服務器,但通常它仍然會和Nginx配合在一起使用:
- 動靜態(tài)資源分離——運用Nginx的反向代理功能分發(fā)請求:所有動態(tài)資源的請求交給Tomcat,而靜態(tài)資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力。
- 負載均衡,當業(yè)務壓力增大時,可能一個Tomcat的實例不足以處理,那么這時可以啟動多個Tomcat實例進行水平擴展,而Nginx的負載均衡功能可以把請求通過算法分發(fā)到各個不同的實例進行處理。