1. 程式人生 > 實用技巧 >快速認知什麼是Nginx伺服器+反向代理

快速認知什麼是Nginx伺服器+反向代理

什麼是Nginx放伺服器

是俄羅斯人開發高效能的 Web和 反向代理 伺服器,基於事件驅動架構,使得其可以支援數以百萬級別的 TCP 連線,在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品;
自由+開源的+高效能+社群活躍,讓Nginx成為世界上使用最多的伺服器之一。

  • 官網:http://nginx.org/
  • 是一個高效能的[HTTP]和[反向代理]web伺服器
  • Nginx程式碼完全用[C語言]從頭寫成
  • 支援系統:Mac/Windows/Linux

目前市場上 阿里、騰訊、百度等,全球反向代理伺服器中排名,據統計,世界上每3個網站中就有一個使用Nginx,用途有很多種,比如反向代理伺服器、檔案伺服器、靜態資源伺服器、業務閘道器、支援多種協議https、POP3等等,功能強大,高效能-支援單機千萬級連線強大的第三方庫支援,加特別多的第三方模組,讓Nginx一舉成為伺服器的佼佼者。

單機到叢集分散式架構來看Nginx充當的角色

光這樣講大家肯定不明白為啥要用Nginx是吧,那我們就從"上古時代"的系統演進和大家說下Nginx可以幫我們解決的問題吧。

基本大家學習系統都是從單節點進行一個講解,好比我們學校學的學生管理系統,或者開發了一個電商小型的系統。這是一個單機應用。這個請求的鏈路是從前端請求後端介面,再通過後端讀取資料庫,把對應的資料通過頁面展示出來。

我們這一個後端應用的話,好比是個電商系統。包含的功能模組有使用者模組,訂單模組,商品模組,庫存模組等等。
我們這個後端應用部署在一臺機器上面。如果這個機器掛了,那我我們這個電商系統就掛了,使用者就請求不到我們這個資料。

為了避免單點故障,我們會部署多幾臺這樣的機器,如果某個機器掛了。就可以避免由於某一臺機器掛了,導致整個系統不可用。
好比你去銀行取錢只有一個人工視窗,對應的服務人員由於急事出差沒來。大家都在排隊,如果能開多幾個這樣的一樣的視窗,那就可以避免這種問題。我們把同個應用部署到多幾臺機器,同時對外提供服務的方式叫做”叢集“;
叢集的話可以解決很多問題,比如可以避免單點故障、給對應的伺服器進行減壓分流等

類似下面的後端應用部署多幾臺機器,這就是個叢集。但這樣的話也有個問題,每個應用都有自己獨有的ip,使用者他應該請求我們哪一臺機器呢?

這個選擇後端哪個節點,選擇的策略是怎樣的?如果某一個節點掛了,那使用者他能否及時的感知到,然後請求不分配給這個應用?大家可以假想一下。如果是你是設計這樣的一箇中間件,你會怎麼去設計?在Nginx沒有出來之前這個可以由前端那邊進行定時輪詢,比如一次請求Ip1, 一次請求ip2輪流切換。

這樣做是沒問題了,但是如果你的後端業務很多那你是不是每一次的時候針對這個業務都要進行開發這樣的一個輪詢策略。單一個很簡單的輪詢策略是不夠的,有些請求他在某個節點梳理很慢,有些請求在某個節點處理很快,那這樣的話就容易造成請求的分配不均勻。

像這種的話,我們稱為負載均衡策略。可以是輪詢,也可以是跟根據ip固定的分到某一個後端節點,也可以根據請求的最短響應時間進行動態的分配,也可以根據應用的權重進行分配,能力多的分配請求多一點。

這類負載均衡策略跟我們後裝的應用沒有很大的關係,比如你這個後端應用可以是一個電商系統,也可以是一個線上教育平臺,也可以是一個管理系統。
如果我們可以把這個負載均衡的選擇策略單獨做一箇中間件,那就可每一個系統都直接複用,就不用每一次都有前端那邊進行開發.

Nginx出現就是為了解決我們剛剛說的這些問題。負載均衡只是它的其中一個應用,它還有更多更強大的應用。
前端請求到我們這個Nginx了,Nginx那邊的話會根據對應的負載均衡策略選擇我們後端應用的某個節點,把請求轉發過去,那這一塊的話,我們稱之為反向代理。

什麼是正向代理伺服器和反向代理伺服器?

關於什麼是正向代理伺服器跟反向代理伺服器,很多人對這一個有點迷糊。
那我們這邊來詳細講一下什麼是正向代理伺服器,什麼是反向代理伺服器,還有對應的應用場景,這樣就可以掌握
這一個也是很常見的面試題,面試官會問,你能否解釋一下什麼是正向代理伺服器,什麼是反向代理伺服器。

正向代理伺服器

  • 它指的是客戶端跟目標伺服器之間的伺服器,客戶端向代理髮送了一個請求指定目標伺服器,然後代理向目標伺服器請求並獲得內容,返回給我們的客戶端,平時說的代理伺服器一般就是正向代理伺服器。

  • 核心:使用者知道自己訪問的目標伺服器

  • 場景:跳板機、訪問原來無法訪問的網站, 比如國外的一些站點
    在這裡插入圖片描述

反向代理伺服器(Nginx)

  • 客戶端和目標伺服器之間的伺服器,客戶端向代理髮送一個請求,然後代理向目標伺服器請求並獲得內容,並返回給客戶端。反向代理隱藏了真實的伺服器
  • 核心:客戶端不知道要訪問的目標伺服器是哪臺伺服器,代理會根據一定的策略選擇一個真實的伺服器進行請求
  • 場景:訪問淘寶,知道訪問的域名是taobao.com, 但是後面提供資料的具體是什麼域名或ip我們是不知道的。

正向代理我們好理解,但是反向代理這一個的話就比較難理解;

那我舉一個生活中的例子,好比我們要去租房子。我們不知道房源在哪裡而房屋中介那邊就知道。所以我們去租房就需要通過中介讓他幫我們去找對應的房子。然後中介也不會把對應房源的那些業主資訊給我們,必須要通過他才可以。比如你去看房的時候,中介會聯絡對應的業主,有些業主忙,他就不能給我們進行看房。有些業主可以,他就可以給我們看房,那這樣的話相當於房屋中介他就是個負載均衡的一個角色,也是一個反向代理。他可以選擇哪一個房子符合我們的需求以及對對應的業主有空和我們籤合同。
在這裡插入圖片描述

回顧一下這篇的核心:

  • 我們主要掌握什麼是Nginx,它可以解決我們怎樣的一個問題
  • 掌握反向代理伺服器跟正向代理伺服器的知識,面試很常問哦
  • 下一篇我們就正式的去安裝部署我們這個Nginx以及學更多的內容。