請(qǐng)問什么叫反向代理和負(fù)載均衡額,關(guān)于Nginx的
問題描述
看百度百科的說明完全不知其所以然,太抽象了,無法理解,希望各位前輩能指導(dǎo)下,謝謝
問題解答
回答1:負(fù)載均衡首先說一下負(fù)載均衡,如果你的網(wǎng)站有大量的用戶訪問,一臺(tái)服務(wù)器忙不過來,那么要多臺(tái)服務(wù)器才行。但是用戶肯定是通過一個(gè)地址去訪問你的網(wǎng)站。你可以通過這個(gè)地址做一臺(tái)負(fù)載均衡服務(wù)器,把請(qǐng)求平均分配給后臺(tái)的多個(gè)應(yīng)用服務(wù)器。
那么如何通過一臺(tái)負(fù)載均衡服務(wù)器將請(qǐng)求分配給后臺(tái)的多個(gè)應(yīng)用服務(wù)器,就可以通過反向代理來實(shí)現(xiàn)。負(fù)載均衡服務(wù)器并不處理業(yè)務(wù)邏輯。用戶的HTTP請(qǐng)求發(fā)給Nginx,Nginx再把請(qǐng)求發(fā)給后臺(tái)的應(yīng)用服務(wù)器,由它來處理請(qǐng)求,處理完成后,HTTP響應(yīng)由應(yīng)用服務(wù)器發(fā)給Nginx,最后發(fā)給客戶端。這就是反向代理。Nginx只是一個(gè)橋梁,連接了客戶端和應(yīng)用服務(wù)器(如上圖)。
PS:負(fù)載均衡可以通過反向代理來實(shí)現(xiàn),但反向代理不是唯一的實(shí)現(xiàn)方式。同時(shí),反向代理可以實(shí)現(xiàn)很多功能,并不只是負(fù)載均衡。
最后,給出我寫的一篇博客,幫你入門Nginx:http://xxgblog.com/2015/05/17/nginx-start/
回答2:你寫的 Web App 如果直接暴露給外網(wǎng),外部請(qǐng)求稍微一多,就會(huì)處理不過來,新的請(qǐng)求完全得不相應(yīng),而且要面對(duì)很多復(fù)雜的網(wǎng)絡(luò)問題(比如慢連接),這時(shí)候使用 Nginx 在中間接收外部請(qǐng)求,擋住不好的請(qǐng)求(超時(shí),慢連接),有序轉(zhuǎn)發(fā)給 Web App,這就是反向代理。
當(dāng)請(qǐng)求很大的時(shí)候,你會(huì)啟動(dòng)多個(gè)服務(wù)器。這時(shí)候 Nginx 又可以將請(qǐng)求按照你定的規(guī)則,分發(fā)給不同的服務(wù)器(比如有兩臺(tái)服務(wù)器A和B,A 這時(shí)候忙碌,B 較空閑,就多分發(fā)一些請(qǐng)求給 B),這就是負(fù)載均衡。
回答3:假設(shè)醫(yī)院有3個(gè)醫(yī)生給人看病,他們技術(shù)水平完全一樣,一個(gè)護(hù)士專門負(fù)責(zé)接待病人。你去看病,找到護(hù)士說我要看病,護(hù)士檢查3個(gè)醫(yī)生的空閑情況,哦,A醫(yī)生排起3個(gè)病人了,C醫(yī)生也有2個(gè)病人了,B醫(yī)生沒病人,你去B醫(yī)生那里吧。醫(yī)生就是服務(wù)資源,護(hù)士就是反向代理,病人就是負(fù)載。負(fù)載均衡就是讓服務(wù)的資源能夠平衡的使用。反向代理就是為了實(shí)現(xiàn)負(fù)載均衡。反向代理由很多種調(diào)度算法,比如最簡(jiǎn)單的,1個(gè)1個(gè)分配,第一個(gè)病人給A醫(yī)生,第二個(gè)病人給B醫(yī)生,第三個(gè)病人給C醫(yī)生,第4個(gè)病人又給A醫(yī)生...以此類推。還有很多其他算法,可以去了解一下。為什么叫反向代理呢?如果你翻過墻,就知道翻墻是要靠代理服務(wù)器,我們連接代理服務(wù)器,代理服務(wù)器跳轉(zhuǎn)到其他網(wǎng)站,這個(gè)可以理解為正向代理。而反向代理恰好相反。可以簡(jiǎn)單的理解為正向代理,代理服務(wù)器在客戶端。反向代理,代理服務(wù)器在服務(wù)器端。
另外反向代理不是只有nginx才能干,apache一樣的可以做這個(gè)事情。
說得比較糙,按我自己的理解整理的,可能有不對(duì)的地方歡迎討論。
