Nginx 負載均衡是什么?負載均衡該如何配置(圖文)
什么是負載均衡
負載均衡主要通過專門的硬件設備或者通過軟件算法實現。通過硬件設備實現的負載均衡效果好、效率高、性能穩定,但是成本比較高。通過軟件實現的負載均衡主要依賴于均衡算法的選擇和程序的健壯性。均衡算法也是多種多樣的,常見的有兩大類:即靜態負載均衡算法和動態負載均衡算法。靜態算法實現比較簡單,在一般網絡環境下也能達到比較好的效果,主要有一般輪詢算法、基于比率的加權輪詢算法以及基于優先級的加權輪詢算法等。動態負載均衡算法在較為復雜的網絡環境中適應性更強,效果更好,主要有基于任務量的最少連接優先算法、基于性能的最快響應優先算法、預測算法及動態性能分配算法等。
網絡負載均衡技術的大致原理是利用一定的分配策略將網絡負載平衡地分攤到網絡集群的各個操作單元上,使得單個重負載任務能夠分擔到多個單元上并行處理,或者使得大量并發訪問或數據 流量分擔到多個單元上分別處理,從而減少用戶的等待響應時間。
Nginx服務器負載均衡配置
Nginx服務器實現了靜態的基于優先級的加權輪詢算法,主要使用的配置是proxy_pass指令和upstream指令,這些內容實際上很容易理解,關鍵點在于Nginx服務器的配置靈活多樣,如何在配置負載均衡的同時合理地整合其他功能,形成一套可以滿足實際需求的配置方案。
下面的有一些基礎示例片段,當然不可能將所有的配置情況包括在內,希望能夠起到拋磚引玉的效果,同時也需要大家在實際應用過程中多總結多積累。在配置中需要注意的地方將以注釋的形式添加。
配置實例一:對所有請求實現一般輪詢規則的負載均衡
在以下實例片段中,backend服務器組中所有服務器的優先級全部配置為默認的weight=1,這樣它們會按照一般輪詢策略依次接收請求任務。該配置是一個最簡單的實現Nginx服務器負載均衡的配置。所有訪問www.51517777.com 的請求都會在backend服務器組中實現負載均衡。實例代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
... upstream backend #配置后端服務器組 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; #默認weight=1 } server { listen 80; server_name www. yunhu.net; index index.html index.htm; location / { proxy_pass http: //backend ; prox_set_header Host $host; } ... } |
配置實例二:對所有請求實現加權輪詢規則的負載均衡
與“配置實例一”相比,在該實例片段中,backend服務器組中的服務器被賦予了不同的優先級別,weight變量的值就是輪詢策略中的“權值”。其中,192.168.1.2:80的級別最高,優先接收和處理客戶端請求;192.168.1.4:80的級別最低,是接收和處理客戶端請求最少的服務器,192.168.1.3:80將介于以上兩者之間。所有訪問www.51517777.com的請求都會在backend服務器組中實現加權負載均衡。實例代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
... upstream backend #配置后端服務器組 { server 192.168.1.2:80 weight=5; server 192.168.1.3:80 weight=2; server 192.168.1.4:80; #默認weight=1 } server { listen 80; server_name www. yunhu.net; index index.html index.htm; location / { proxy_pass http: //backend ; prox_set_header Host $host; } ... } |
配置實例三:對特定資源實現負載均衡
在該實例片段中,我們設置了兩組被代理的服務器組,名為“videobackend”的一組用于對請求video資源的客戶端請求進行負載均衡,另一組用于對請求filed資源的客戶端請求進行負載均衡。所有對“http://www.51517777.com/video/* ”的請求都會在videobackend服務器組中獲得均衡效果,所有對“http://www.51517777.com/file/* ”的請求都會在filebackend服務器組中獲得均衡效果。該實例中展示的是實現一般負載均衡的配置,對于加權負載均衡的配置可以參考“配置實例二”。
在location /file/ {......}塊中,我們將客戶端的真實信息分別填充到了請求頭中的“Host”、“X-Real-IP”和“X-Forwareded-For”頭域,這樣后端服務器組收到的請求中就保留了客戶端的真實信息,而不是Nginx服務器的信息。實例代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
... upstream videobackend #配置后端服務器組1 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; } upstream filebackend #配置后端服務器組2 { server 192.168.1.5:80; server 192.168.1.6:80; server 192.168.1.7:80; } server { listen 80; server_name www. yunhu.net; index index.html index.htm; location /video/ { proxy_pass http: //videobackend ; #使用后端服務器組1 prox_set_header Host $host; ... } location /file/ { proxy_pass http: //filebackend ; #使用后端服務器組2 #保留客戶端的真實信息 prox_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... } } |
配置實例四:對不同域名實現負載均衡
在該實例片段中,我們設置了兩個虛擬服務器和兩組后端代理的服務器組,分別用來接收不同的域名請求和對這些請求進行負載均衡處理。如果客戶端請求域名為“home.yunhu.net”,則服務器server1接收并轉向homebackend服務器組進行負載均衡處理;如果客戶端請求域名為“bbs.yunhu.net”,則由服務器server2接收bbsbackend服務器級進行負載均衡處理。這樣就實現了對不同域名的負載均衡。
需要注意兩組后端服務器組中有一臺服務器server 192.168.1.4:80是公用的。在該服務器上需要部署兩個域名下的所有資源才能保證客戶端請求不會出現問題。實例代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
... upstream bbsbackend #配置后端服務器組1 { server 192.168.1.2:80 weight=2; server 192.168.1.3:80 weight=2; server 192.168.1.4:80; } upstream homebackend #配置后端服務器組2 { server 192.168.1.4:80; server 192.168.1.5:80; server 192.168.1.6:80; } #開始配置server 1 server { listen 80; server_name home.myweb.name; index index.html index.htm; location / { proxy_pass http: //homebackend ; prox_set_header Host $host; ... } ... } #開始配置server 2 server { listen 80; server_name bbs. yunhu.net; index index.html index.htm; location / { proxy_pass http: //bbsbackend ; prox_set_header Host $host; ... } ... } |
配置實例五:實現帶有URL重寫的負載均衡
首先,我們來看具體的源碼,這是在實例一的基礎上做的修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
... upstream backend #配置后端服務器組 { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; #默認weight=1 } server { listen 80; server_name www. yunhu.net; index index.html index.htm; location /file/ { rewrite ^( /file/ .*) /media/ (.*)\.*$) $1 /mp3/ $2.mp3 last; } location / { proxy_pass http: //backend ; prox_set_header Host $host; } ... } |
該實例片段與“配置一”相比,增加了對URI包含“/file/”的URL重寫功能。例如客戶端請求的URL為“http://www.51517777.com/file/downlaod/media/1.mp3 ”時,該虛擬服務器首先使用location file/ {......}塊轉發到后端的backend服務器組中實現負載均衡。這樣,就車輕而易舉地實現了帶有URL重寫功能的負載均衡。在該配置方案中,一定要掌握清楚rewrite指令中last標記和break標記的區別,才能達到預計的效果。
以上5個配置實例展示了Nginx服務器實現不同情況下負載均衡配置的基本方法。由于Nginx服務器的功能在結構上是增量式的,因此 ,我們可以在這些配置的基礎上繼續添加更多功能,比如Web緩存等功能,以及Gzip壓縮技術、身份認證、權限管理等。同時在使用upstream指令配置服務器組時,可以充分發揮各個指令的功能,配置出滿足需求、高效穩定、功能豐富的Nginx服務器。
- 上一篇
紅旗Linux上配置FTP 允許root用戶登錄(圖文)
內容:讓紅旗Linux支持fFTP服務,并允許root用戶登錄環境:以下在紅旗Linux DC Server 5.0上測試通過步驟如下:1、修改/etc/ftpusers 文件,在root前插入#符號2、在控制面板的服務中,將proftpd服務的啟動類別設置為自動啟動。3
- 下一篇
docker獲取Let's Encrypt永久免費SSL證書的方法(圖文)
一、起因官方的cerbot太煩了,不建議使用還不如野蠻生長的acme.sh,而這里介紹docker運行cerbot獲取Let's Encrypt永久免費SSL證書二、選型cerbot的證書不會自動刷新日期,但是acme.sh自帶這功能,每天凌晨0:00自動檢測過
更多相關
相關文章
- linux的目錄結構;Linux系統各個目錄的作用介紹
- mssql2000數據庫通過附加數據庫轉到SQL2008(圖文)
- Win2012配置asp網站(圖文教程)
- win2008 r2系統iis7中如何設置ip限制(圖文)
- IIS7 支持html頁面包含(include)html頁面 IIS設置與代碼編寫
- Win2003+IIS6.0+php5.2.2+MySQL 5.0.41+phpMyAdmin 2.10.1環境配置安裝
- 網站采集入庫502 Bad Gateway錯誤時,修改PHP 配置修改參考
- 出錯了,[騰訊云COSFS]運行時發生錯誤!qcloud_cos.cos_exception.CosClientError: SecretId and SecretKey is Required!
- 騰訊Linux云主機快速掛載云盤命令,設置開機自動掛載詳細圖文教程
- 騰訊輕量云主機win2012系統掛載SSD云硬盤操作步驟(圖文)