Nginx 入門知識

1 Nginx 與 Nginx 中的反向代理


Nginx 是一個高性能的 HTTP 和反向代理 web 服務器,具有正反向代理,負載均衡,HTTP 服務器等功能,以其高性能、穩定、功能豐富、配置簡單及佔用系統資源少而著稱。

正向代理與反向代理的區別
在正向代理中,客戶端是可以明確知道服務器地址的,客戶端會把請求發送給代理,代理再把請求轉發給服務器,那麼響應的傳遞順序也是服務器 -> 代理 -> 客戶端,客戶端知道服務器,而服務器不知道客戶端,事實上隱藏了客戶端的真實信息。與正向代理相反,反向代理隱藏的是服務器的真實信息。在反向代理中,客戶端並不知道服務器,但它一定知道代理。只需要把請求發送給代理就行了,然後代理會根據一定的規則將請求轉發給服務器,事實上,客戶端並不知道它訪問的是哪一臺服務器。這樣子就達到了隱藏服務器信息的目的。

2 Nginx 之負載均衡


除了反向代理,Nginx 的另外一個重要功能就是負載均衡了。是這樣的,在一開始學習的時候,一般我們會把所有服務放在單臺服務器上,但是隨着業務量的逐漸增大,單臺機器好像在穩定性或者高性能上都承受不住這個考驗,那怎麼辦呢?那沒辦法啊,只能變集中式爲分佈式,加多幾臺服務器唄,日子還得過下去啊對不對。那現在問題來了,我們應該如何向這些服務器分發請求呢?

一臺服務器在單位時間內受到的壓力超過自身承受能力時,服務器就會崩潰,爲避免服務器崩潰,給用戶更好的體驗,我們必須在客戶端與服務器之間引入一箇中間服務器,當用戶訪問時,中間服務器會在服務器中選擇一個壓力較小的服務器,然後將請求發送到這個壓力小的服務器上,這就是負載均衡。在中間服務器的幫助下,在客戶端的訪問下保證了服務器集羣中每個服務器的壓力趨於平衡,避免出現服務器崩潰的情況。對於反向代理與負載均衡的關係,反向代理是負載均衡的基石,要達到負載均衡的目的,需要先有中間服務器來實現反向代理。

3 Nginx 的幾種負載均衡方式

 

  • 輪詢:默認方式,每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器掛掉,就會自動剔除。
  • 權重:指定輪詢機率,權重與訪問比率成正比,用於後端服務器性能不均的情況。
  • ip_hash:前面兩種方式可能出現下一個請求來的時候請求可能分發到另外一個服務器的情況,如果我們需要一個客戶端只訪問一個服務器,可以選擇 ip_hash 的方式,iphash 的每個請求都會按照訪問 ip 的 hash 結果進行分配,這樣可以保證每個客戶端固定訪問一個後端服務器。
  • fair:需要第三方模塊,會按後端服務器的響應時間來分配請求,響應時間短的優先分配。
  • url_hash:需要第三方模塊,會按訪問 url 的 hash 結果來分配請求,使每個 url 定向到同一個後端服務器。


4 Nginx 之動靜分離


在 web 開發中,一般來說,動態資源指的是那些後臺資源,而靜態資源就是指 html,css,js,img 等文件。

爲了加快網站的解析速度,可以把動態資源和靜態資源由不同的服務器來解析,從而加快解析速度。降低原來單個服務器的壓力。我們可以將靜態資源部署在 Nginx 上,當一個請求來的時候,如果是靜態資源的請求,就直接到 Nginx 配置的靜態資源目錄下面獲取資源,如果是動態資源的請求,Nginx 就會利用反向代理,把請求轉發給後臺應用去處理,從而實現動靜分離。在使用前後端分離之後,可以很大程度提升靜態資源的訪問速度。

5 Nginx 的優勢


我們爲什麼不選擇別的 Web 服務器,比如 Apache 之類的呢,Nginx 相比於別的 Web 服務器,有什麼優勢呢?

  • 高擴展性:由多個不同功能、不同層次、不同類型且耦合度極高的模塊組成,這種低耦合的設計,造就了它龐大的第三方模塊
  • 高可靠性:每個 worker 進程相對獨立,master 進程在某個 worker 進程出錯時能迅速拉起新的 worker 進程
  • 低內存消耗:一般情況下10000個非活躍的keep-alive連接僅消耗2.5M的內存
  • 單機支持10萬以上的併發連接,Nginx 支持的併發連接上限取決於內存,10萬尚未封頂
  • 可以熱部署
  • BSD許可協議
  • Nginx 的單次請求很快
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章