2022-03-26

前端代理怎么設(shè)置之負(fù)載均衡

以下部分內(nèi)容由小紅書www.xiaohongshutuiguang.cn)轉(zhuǎn)載提供

我們先來看張圖吧:

  使用集群是網(wǎng)站解決高并發(fā)、海量數(shù)據(jù)問題的常用手段。當(dāng)一臺服務(wù)器的處理能力、存儲空間不足時,不要企圖去換更強(qiáng)大的服務(wù)器,對大型網(wǎng)站而言,不管多么強(qiáng)大的服務(wù)器,都滿足不了網(wǎng)站持續(xù)增長的業(yè)務(wù)需求。這種情況下,更恰當(dāng)?shù)淖龇ㄊ窃黾右慌_服務(wù)器分擔(dān)原有服務(wù)器的訪問及存儲壓力。通過負(fù)載均衡調(diào)度服務(wù)器,將來自瀏覽器的訪問請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺服務(wù)器上,如果有更多的用戶,就在集群中加入更多的應(yīng)用服務(wù)器,使應(yīng)用服務(wù)器的負(fù)載壓力不再成為整個網(wǎng)站的瓶頸。

  那么下面,我們來看下,如何通過nginx服務(wù)器,配置集群。首先,我們需要在nginx服務(wù)器,同過不同的端口號,創(chuàng)建幾個node服務(wù)。node服務(wù)的代碼類似這樣:

varhttp = require( 'http' );varserver =http.createServer(function ( request ,response ){

? ? response.end('server3 000');

} );

server.listen( 3000 ,function(){

console.log( 'HTTP服務(wù)器啟動中,端口:3000' );

});

  然后,nginx中可以這樣配置:

http{

upstream zhufeng {

? ? server 127.0.0.1:3000weight=10;

? ? server 127.0.0.1:4000;

? ? server 127.0.0.1:5000;

}

server {

? ? ? ? location / {

? ? ? ? ? ? proxy_pass http://zhufeng;? ? ? ? }

? ? }

}

  然后呢,安裝一下pm2:

yuminstallpm2 -g

  如果太慢的話,可以試試淘寶源。這里就不說怎么配置了哦。然后安裝好pm2后,通過pm2啟動各個node服務(wù)。pm2是一個node應(yīng)用的進(jìn)程管理器。

  然后,可以通過以下命令來啟動和查看node服務(wù)進(jìn)程:

# 啟動node服務(wù)

pm2 start xxx.js name xxx

# 查看當(dāng)前服務(wù)

pm2 list

后端服務(wù)器調(diào)試狀態(tài):

狀態(tài)描述

down當(dāng)前的服務(wù)器不參與負(fù)載均衡

backup當(dāng)其它節(jié)點都無法使用時的備份的服務(wù)器

max_fails允許請求失敗的次數(shù),到達(dá)最大次數(shù)就會休眠

fail_timeout經(jīng)過max_fails失敗后,服務(wù)暫停的時間,默認(rèn)10秒

max_conns限制每個server最大的接收的連接數(shù),性能高的服務(wù)器可以連接數(shù)多一些

例子:

upstream webserver{

? server localhost:3000 down;

? server localhost:4000 backup;

? server localhost:5000max_fails=1fail_timeout=10s;

}

分配方式:

類型種類

輪詢(默認(rèn))每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除

weight(加權(quán)輪詢)指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況

ip_hash每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題

least_conn哪個機(jī)器上連接數(shù)少就分發(fā)給誰

url_hash(第三方)按訪問的URL地址來分配 請求,每個URL都定向到同一個后端 服務(wù)器上(緩存)

fair(第三方)按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配

正定義hashhash自定義key

例子:

upstream webserver{

? ip_hash;

? server 127.0.0.1:3000;

}

upstream webserver{

? least_conn;

? server 127.0.0.1:3000;

}

upstream webserver{

? url_hash;

? server 127.0.0.1:3000;

}

upstream webserver{

? fair;

? server 127.0.0.1:3000;

}

upstream webserver{

? hash $request_uri;

? server 127.0.0.1:3000;

}

三、其他

一)緩存

  首先啊,緩存有很多種,比如之前學(xué)過的瀏覽器緩存,還有應(yīng)用服務(wù)器緩存,代理緩存,客戶端緩存等等等等。我們可以在nginx中使用prxoy_cache來設(shè)置代理緩存。

http{?

? ? # 緩存路徑 目錄層級 緩存空間名稱和大小 失效時間為7天 最大容量為10g

? ? proxy_cache_path /data/nginx/cache levels=1:2keys_zone=cache:100m inactive=60m max_size=10g;?

}?

  稍微復(fù)雜點的方式如下:

if($request_uri ~ ^/cache/(login|logout)) {

? ? ? set $nocache 1;

? ? }

? ? location / {

? ? ? proxy_pass http://webserver;? ? }

? ? location ~ ^/cache/ {

? ? proxy_cache cache;

? ? proxy_cache_valid? 200206304301302 60m;? # 對哪些狀態(tài)碼緩存,過期時間為60分鐘

? ? proxy_cache_key $uri;? #緩存的維度

? ? proxy_no_cache $nocache;

? ? proxy_set_header Host $host:$server_port;? #設(shè)置頭

? ? proxy_set_header X-Real-IP $remote_addr;? #設(shè)置頭

? ? proxy_set_header? X-Forwarded-For $proxy_add_x_forwarded_for;? #設(shè)置頭

? ? proxy_pass http://127.0.0.1:6000;}

  然后呢,上面的各個字段的含義如下:

鍵值含義

proxy_cache使用名為cache的對應(yīng)緩存配置

proxy_cache_valid 200 206 304 301 302 10d;對httpcode為200的緩存10天

proxy_cache_key $uri定義緩存唯一key,通過唯一key來進(jìn)行hash存取

proxy_set_header自定義http header頭,用于發(fā)送給后端真實服務(wù)器

proxy_pass指代理后轉(zhuǎn)發(fā)的路徑,注意是否需要最后的/

二)location

  它的使用其實就是正則表達(dá)式,但是語法規(guī)則會有些特性,正則我就不在這里多說,咱們直接看下location的語法:

location僅匹配URI,忽略參數(shù)

前綴字符串

常規(guī)

= 精確匹配

^~ 匹配上后則不再進(jìn)行正則表達(dá)式的匹配

正則表達(dá)式

~ 大小寫敏感的正則表達(dá)式匹配

~*忽略大小寫的正則表達(dá)式匹配

內(nèi)部調(diào)轉(zhuǎn)

用于內(nèi)部跳轉(zhuǎn)的命名location @

Syntax location [=|~|~*|^~] uri {...}

? ? ? location @name{...}

default -Context server,location? ?

  匹配的優(yōu)先級,按照上面的順序,從上到下,最上面的優(yōu)先級最高,我們來看個實際的例子:

location ~ /T1/$ {

? ? return 200'匹配到第一個正則表達(dá)式';

}

location ~* /T1/(\w+)$ {

? ? return 200'匹配到最長的正則表達(dá)式';

}

location ^~ /T1/ {

? ? return 200'停止后續(xù)的正則表達(dá)式匹配';

}

location? /T1/T2 {

? ? return 200'最長的前綴表達(dá)式匹配';

}

location? /T1 {

? ? return 200'前綴表達(dá)式匹配';

}

location = /T1 {

? ? return 200'精確匹配';

}

/T1// 精確匹配/T1/// 停止后續(xù)的正則表達(dá)式匹配/T1/T2// 匹配到最長的正則表達(dá)式/T1/T2/// 最長的前綴表達(dá)式匹配/t1/T2// 匹配到最長的正則表達(dá)式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,228評論 0 9
  • 1.簡介: ? Nginx:engine X ,2002年,開源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 2,018評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一、I/O模型 (一)I/...
    哈嘍別樣閱讀 983評論 0 4
  • 一、前言 二、環(huán)境準(zhǔn)備 三、安裝與配置Nginx 四、Nginx之反向代理 五、Nginx之負(fù)載均衡 六、Ngin...
    愛顛勺的王木木閱讀 10,485評論 2 60

友情鏈接更多精彩內(nèi)容