Nginx實(shí)現(xiàn)負(fù)載均衡(整合SpringBoot小demo)
點(diǎn)擊關(guān)注,與你共同成長!

1.前言
要理解負(fù)載均衡,必須先搞清楚正向代理和反向代理。
注:
正向代理,代理的是用戶。
反向代理,代理的是服務(wù)器。
2.什么是負(fù)載均衡
當(dāng)一臺(tái)服務(wù)器的單位時(shí)間內(nèi)的訪問量越大時(shí),服務(wù)器壓力就越大,大到超過自身承受能力時(shí),服務(wù)器就會(huì)崩潰。為了避免服務(wù)器崩潰,讓用戶有更好的體驗(yàn),我們通過負(fù)載均衡的方式來分擔(dān)服務(wù)器壓力。我們可以建立很多很多服務(wù)器,組成一個(gè)服務(wù)器集群,當(dāng)用戶訪問網(wǎng)站時(shí),先訪問一個(gè)中間服務(wù)器,在讓這個(gè)中間服務(wù)器在服務(wù)器集群中選擇一個(gè)壓力較小的服務(wù)器,然后將該訪問請(qǐng)求引入該服務(wù)器。如此以來,用戶的每次訪問,都會(huì)保證服務(wù)器集群中的每個(gè)服務(wù)器壓力趨于平衡,分擔(dān)了服務(wù)器壓力,避免了服務(wù)器崩潰的情況。
負(fù)載均衡是用反向代理的原理實(shí)現(xiàn)的。
3.準(zhǔn)備工作
結(jié)合本文場(chǎng)景,需要安裝Nginx和Java環(huán)境(運(yùn)行SpringBoot項(xiàng)目)
3.1 關(guān)于Mac系統(tǒng)安裝Nginx
本次用的是 homebrew 安裝的
大家也可前去官網(wǎng)下載
3.2 測(cè)試項(xiàng)目說明
由于只是測(cè)試, SpringBoot只是映射了根路徑,端口分別是 10001 和 10002 ,分別返回 demo1 和 demo2 字符串作為區(qū)分。
4.Nginx負(fù)載均衡的集中方式介紹
4.1 輪詢
輪詢方式是Nginx負(fù)載默認(rèn)的方式,顧名思義,所有請(qǐng)求都按照時(shí)間順序分配到不同的服務(wù)上,如果服務(wù)Down掉,可以自動(dòng)剔除,如下配置后輪訓(xùn)10001服務(wù)和10002服務(wù)。
upstream codingce-nginx {
server localhost:10001;
server localhost:10002;
}
4.2 權(quán)重
指定每個(gè)服務(wù)的權(quán)重比例,weight和訪問比率成正比,通常用于后端服務(wù)機(jī)器性能不統(tǒng)一,將性能好的分配權(quán)重高來發(fā)揮服務(wù)器最大性能,如下配置后10002服務(wù)的訪問比率會(huì)是10001服務(wù)的二倍。
upstream codingce-nginx {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
4.3 iphash
每個(gè)請(qǐng)求都根據(jù)訪問ip的hash結(jié)果分配,經(jīng)過這樣的處理,每個(gè)訪客固定訪問一個(gè)后端服務(wù),如下配置(ip_hash可以和weight配合使用)。
upstream codingce-nginx {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
4.4 最少連接
將請(qǐng)求分配到連接數(shù)最少的服務(wù)上。
upstream codingce-nginx {
least_conn;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
4.5 fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。
upstream codingce-nginx {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
fair;
}
4.6 url_hash(第三方)
按訪問url的hash結(jié)果來分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。
upstream codingce-nginx {
server localhost:10001;
server localhost:10002;
hash $request_uri;
hash_method crc32;
}
5.測(cè)試(以輪詢?yōu)槔?
訪問http://localhost:10000
輪詢方式,刷新后依次切換后端服務(wù)

如果要修改負(fù)載均衡算法修改對(duì)應(yīng)upstream模塊即可。
此次nginx路徑展示
主配置與自定義配置
注意:下方自定義配置文件是自定義配置文件目錄 vhost/
輪詢配置 在nginx.conf文件中配置的
upstream codingce-nginx {
server localhost:10001;
server localhost:10002;
}

進(jìn)入自定義配置文件夾配置自定義配置
williamma@WilliamdeMacBook-Pro nginx % cd vhost
williamma@WilliamdeMacBook-Pro vhost % ll
total 16
drwxr-xr-x 4 williamma admin 128 5 13 15:17 ./
drwxr-xr-x 19 williamma admin 608 5 13 15:28 ../
-rw-r--r-- 1 williamma admin 549 4 16 16:17 gulimall.conf
-rw-r--r-- 1 williamma admin 167 5 13 15:17 mytest.conf
williamma@WilliamdeMacBook-Pro vhost % vim mytest.conf
配置文件展示
server {
listen 10000;
server_name localhost;
location / {
#用在此處
proxy_pass http://codingce-nginx;
proxy_redirect default;
}
}
測(cè)試SpringBoot項(xiàng)目地址
[Github]:https://github.com/xzMhehe/codingce-java
[Gitee]”https://gitee.com/codingce/codingce-java

漫話:如何給女朋友解釋為什么不能在MySQL中使用UTF-8編碼
以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯(cuò)的,歡迎「分享」「贊」或者點(diǎn)擊「在看」支持,謝謝各位。
