天天看點

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

文章目錄

    • 1、Nginx簡介
      • 1.1、Nginx概念及作用
      • 1.2、正向代理
      • 1.2、反向代理
      • 1.3、負載均衡
      • 1.4、動靜分離
    • 2、Nginx常用指令
    • 3、Nginx配置檔案
    • 4、Nginx配置執行個體
      • 4.1、反向代理
        • 4.1.1、反向代理準備工作
        • 4.1.2、反向代理執行個體(一)
        • 4.1.3、反向代理執行個體(二)
      • 4.2、負載均衡
      • 4.3、動靜分離
        • 4.3.1、動靜分離準備工作
        • 4.3.2、動靜分離執行個體
    • 5、Nginx工作原了解析
該技術部落格是關于尚矽谷Nginx教程的筆記總結,希望能為大家帶來幫助!

1、Nginx簡介

1.1、Nginx概念及作用

概念:Nginx是高性能的HTTP和反向代理的web伺服器,特點是占有記憶體少,由于它處理高并發能力非常強大,常用于高并發場景,能經受高負載的考驗。

Nginx 專為性能優化而開發,性能是其最重要的考量,實作上非常注重效率,能經受高負載的考驗,有報告表明能支援高達 50,000 個并發連接配接數。

1.2、正向代理

我們需要在用戶端配置代理伺服器,此時将代理伺服器和用戶端看成一個用戶端,這樣伺服器就不知道是哪個用戶端發送的請求,通過代理伺服器進行通路,這就是正向代理

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

1.2、反向代理

反向代理:用戶端對反向代理是無感覺的,因為用戶端不需要任何配置就可以通路,我們隻需要将請求發送到反向代理伺服器,由反向代理伺服器去選擇目标伺服器擷取資料後,在傳回給用戶端

反向代理伺服器和目标伺服器對外就是一個伺服器,是以我們需要把它們看成一個服務端,暴露的是代理伺服器 IP 位址,隐藏了真實伺服器 IP 位址,這樣用戶端就不知道請求最後到底發送給哪台伺服器

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

1.3、負載均衡

單個伺服器解決不了大量請求,是以我們增加伺服器的數量,然後将請求分發到各個伺服器上,将原先請求集中到單個伺服器上的情況改為将請求分發到多個伺服器上,這就是我們所說的負載均衡

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

1.4、動靜分離

為了加快網站的解析速度,可以把動态頁面和靜态頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

2、Nginx常用指令

由于該技術部落格是關于Nginx的操作筆記,是以這裡不會講解如何在Linux上安裝Nginx

注意:使用Nginx操作指令前提,必須進入到Nginx目錄 /usr/local/nginx/sbin

常用指令:

  1. 檢視Nginx版本号:./nginx -v
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  2. 啟動Nginx:./nginx
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  3. 關閉Nginx:./nginx -s stop
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  4. 重新加載Nginx:./nginx -s reload
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

3、Nginx配置檔案

首先我們需要知道Nginx配置檔案的位置:

/usr/local/nginx/conf/nginx.conf

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

Nginx配置檔案有3部分組成:

  1. 全局塊

從配置檔案開始到 events 塊之間的内容,主要會設定一些影響 nginx 伺服器整體運作的配置指令

比如:worker_processes 1

這是 Nginx 伺服器并發處理服務的關鍵配置,worker_processes 值越大,可以支援的并發處理量也越多,但是會受到硬體、軟體等裝置的制約

  1. events塊

events 塊涉及的指令主要影響 Nginx 伺服器與使用者的網絡連接配接

比如:worker_connections 1024

表示每個 work process 支援的最大連接配接數為 1024

這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。

  1. http塊
Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

這算是 Nginx 伺服器配置中最頻繁的部分

需要注意的是:http 塊也可以包括 http 全局塊、server 塊。

4、Nginx配置執行個體

4.1、反向代理

4.1.1、反向代理準備工作

實作效果:

打開浏覽器,輸入位址www.123.com,跳轉到Linux系統上的Tomcat首頁面

注意:進行案例示範之前,請確定Linux上已經安裝Nginx和Tomcat!

  1. 進入到tomcat的bin目錄中,輸入指令啟動伺服器:./startup.sh
  2. 對外開放通路的端口:firewall-cmd --add-port=8080/tcp --permanent
  3. 重新開機防火牆:firewall-cmd --reload
  4. 在window系統中通過浏覽器通路tomcat伺服器
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  5. 通路過程分析:
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

4.1.2、反向代理執行個體(一)

  1. 在windows系統的host檔案進行域名和ip對應關系的配置,通路路徑為:C:\Windows\System32\drivers\etc
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  2. 在nginx中進行請求轉發配置(反向代理)
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  3. 最終打開網址輸入:www.123.com,測試成功

4.1.3、反向代理執行個體(二)

實作效果:

使用 nginx 反向代理,根據通路的路徑跳轉到不同端口的服務中

nginx 監聽端口為 9001 通路

http://192.168.50.128:9001/edu/a.html 直接跳轉到 127.0.0.1:8080

http://192.168.50.128:9001/vod/a.html 直接跳轉到 127.0.0.1:8081

  1. 在/usr/src目錄下建立兩個檔案夾分别是:tomcat8080,tomcat8081,将tomcat壓縮包分别拖入到兩個檔案夾中,并解壓:tar -xvf apache-tomcat-7.0.70.tar.gz,解壓完成後啟動兩個tomcat
  2. 分别在兩個tomcat中的webapps目錄下存放edu檔案和vod檔案,檔案夾下分别存放兩個html頁面,用于測試
  3. 找到nginx配置檔案,進行方向代理配置
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  4. 開放對外通路的端口号,文法如下:
firewall-cmd --add-port=端口号/tcp --permanent
           
  1. 進行測試

4.2、負載均衡

實作效果:浏覽器輸入http://192.168.50.128/edu/a.html,負載均衡效果,将請求輪詢形式轉發到8080,8081端口

  1. 準備兩台tomcat伺服器,一台是8080,另一台是8081
  2. 在兩台tomcat的webapps目錄中,分别建立edu檔案夾,在edu中放入a.html檔案
  3. 在nginx配置檔案中的http塊進行負載均衡的配置
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

随着網際網路資訊的爆炸性增長,負載均衡(load balance) 已經不再是一個很陌生的話題,負載均衡即是将負載分攤到不同的服務單元,既保證服務的可用性,又保證響應足夠快,給使用者很好的體驗。

Nginx 提供了幾種配置設定方式(政策):

  1. 輪詢(預設):每個請求按時間順序逐一配置設定到不同的後端伺服器,如果後端伺服器 down 掉,能自動剔除。
  2. weight:weight 代表權,重預設為 1,權重越高被配置設定的用戶端越多指定輪詢幾率,weight 和通路比率成正比,用于後端伺服器性能不均的情況。
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  3. ip_hash:每個請求按通路 ip 的 hash 結果配置設定,這樣每個訪客固定通路一個後端伺服器,可以解決 session 的問題。
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  4. fair(第三方):按後端伺服器的響應時間來配置設定請求,響應時間短的優先配置設定。
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

4.3、動靜分離

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

通過 location 指定不同的字尾名實作不同的請求轉發。通過 expires 參數設定,可以使浏覽器緩存過期時間,減少與伺服器之前的請求和流量。具體 Expires 定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過浏覽器自身确認是否過期即可,是以不會産生額外的流量。此種方法非常适合不經常變動的資源。(如果經常更新的檔案,不建議使用 Expires 來緩存),我這裡設定 3d,表示在這 3 天之内通路這個 URL,發送一個請求,比對伺服器該檔案最後更新時間沒有變化,則不會從伺服器抓取,傳回狀态碼 304,如果有修改,則直接從伺服器重新下載下傳,傳回狀态碼 200。

4.3.1、動靜分離準備工作

在Linux系統根目錄中建立data檔案夾,檔案夾中存放兩個檔案夾分别為:

  1. www
  2. image

在www中放入a.html檔案,在image檔案夾中放入01.jpg圖檔

4.3.2、動靜分離執行個體

  1. nginx配置檔案中進行配置
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  2. 将nginx伺服器進行重新啟動
  3. 最終進行測試

在浏覽器中輸入位址:http://192.168.50.128/image/01.jpg

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

因為配置檔案 autoindex on

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

在浏覽器中輸入位址:http://192.168.50.128/www/a.html

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

5、Nginx工作原了解析

  1. master & worker
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  2. worker如何進行工作
    Nginx學習筆記詳解:反向代理,負載均衡,動靜分離
  3. master-workers 的機制的好處

(1)可以使用 nginx –s reload 熱部署,利用 nginx 進行熱部署操作

(2)每個 woker是獨立的程序,如果有其中的一個 woker 出現問題,其他 woker 獨立的,繼續進行争搶,實作請求過程,不會造成服務中斷

  1. 設定多少個 woker 合适?
worker 數和伺服器的 cpu 數相等是最為适宜的
  1. 連接配接數 worker_connection

第一個:發送請求,占用了 woker 的幾個連接配接數?

答案:2 或者 4 個

第二個:nginx 有一個 master,有四個 woker,每個 woker 支援最大的連接配接數 1024,支援的最大并發數是多少?

普通的靜态通路最大并發數是: worker_connections * worker_processes / 2,

而如果是 HTTP 作 為反向代理來說,最大并發數量應該是 worker_connections * worker_processes/4

Nginx學習筆記詳解:反向代理,負載均衡,動靜分離

繼續閱讀