Nginx + Spring Boot 實(shí)現(xiàn)負(fù)載均衡
閱讀本文大概需要 4.6 分鐘。
前言
負(fù)載均衡介紹

負(fù)載均衡策略
upstream xuwujing {server www.panchengming.com;server www.panchengming2.com;}
upstream?xuwujing?{least_conn;server www.panchengming.com;server www.panchengming2.com;}
upstream xuwujing {ip_hash;server www.panchengming.com;server www.panchengming2.com;}
upstream xuwujing {hash $request_uri consistent;server www.panchengming.com;server www.panchengming2.com;}
header :從服務(wù)器接收第一個字節(jié)的時間。 last_byte:從服務(wù)器接收完整響應(yīng)的時間。 last_byte inflight:從服務(wù)器接收完整響應(yīng)的時間。
upstream xuwujing { least_time header; server www.panchengming.com; server www.panchengming2.com; }
6.Random:每個請求將被傳遞到隨機(jī)選擇的服務(wù)器。如果指定了兩個參數(shù),首先,NGINX根據(jù)服務(wù)器權(quán)重隨機(jī)選擇兩個服務(wù)器,然后使用指定的方法選擇其中一個。
least_conn :活動連接的最少數(shù)量 least_time=header (NGINX Plus):從服務(wù)器接收響應(yīng)標(biāo)頭的最短平均時間 ($upstream_header_time)。 least_time=last_byte (NGINX Plus) :從服務(wù)器接收完整響應(yīng)的最短平均時間($upstream_response_time)。
upstream xuwujing { random two least_time=last_byte; server www.panchengming.com; server www.panchengming2.com; }Nginx+SpringBoot實(shí)現(xiàn)負(fù)載均衡
環(huán)境準(zhǔn)備
依賴JDK1.8以上的版本; 依賴Nginx環(huán)境;
mvn clean package?將項(xiàng)目進(jìn)行打包為jar文件,然后將application.properties和此jar項(xiàng)目放在一個文件夾中,然后復(fù)制該文件夾(這里為了清晰所以進(jìn)行復(fù)制,實(shí)際不復(fù)制更改端口重啟也行),修改復(fù)制文件夾application.properties的端口,比如改為8086。Nginx 配置
upstream pancm{server 127.0.0.1:8085;server 127.0.0.1:8086;}
upstream pancm:定義一個名稱,隨意就行; server + ip:端口 or 域名;
server {listen 80;server_name 127.0.0.1;location / {root html;proxy_pass http://pancm;proxy_connect_timeout 3s;proxy_read_timeout 5s;proxy_send_timeout 3s;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
server: 虛擬主機(jī)的名稱,一個http中可以配置多個server; listen:Nginx默認(rèn)的端口; server_name:Nginx服務(wù)的地址,可以使用域名,多個用空格分隔。 proxy_pass:代理路徑,一般配置upstream后面的名稱用于實(shí)現(xiàn)負(fù)載均衡,可以直接配置ip進(jìn)行跳轉(zhuǎn);
events {worker_connections 1024;}error_log nginx-error.log info;http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream pancm{server 127.0.0.1:8085;server 127.0.0.1:8086;}server {listen 80;server_name 127.0.0.1;location / {root html;proxy_pass http://pancm;proxy_connect_timeout 3s;proxy_read_timeout 5s;proxy_send_timeout 3s;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}}
負(fù)載均衡測試
在完成Nginx配置之后,我們啟動Nginx。
linux輸入/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,如果已經(jīng)啟動可以使用/usr/local/nginx/sbin/nginx -s reload命令進(jìn)行熱加載配置文件,Windows直接點(diǎn)擊Nginx目錄下的nginx.exe或者?cmd運(yùn)行start nginx進(jìn)行啟動,如果啟動了依舊可以使用nginx -s reload進(jìn)行熱加載。
Nginx啟動完成之后,我們依次啟動剛剛下載的springboot和復(fù)制更改端口的項(xiàng)目,輸入:java -jar springboot-jsp-thymeleaf.jar啟動。
都啟動成功之后,我們在瀏覽器輸入服務(wù)的ip即可進(jìn)行訪問。
示例圖:

注:這里我使用的是windows系統(tǒng)做測試,實(shí)際linux也是一樣的。
然后我們進(jìn)行操作,并查看控制臺日志!

從上述示例圖中我們進(jìn)行4次界面刷新請求,最終平均分配到兩個服務(wù)中去了,從上述的測試結(jié)果中我們實(shí)現(xiàn)了負(fù)載均衡。
這里我在說一下使用Nginx的注意事項(xiàng),在進(jìn)行學(xué)習(xí)和測試的時候,使用nginx默認(rèn)的端口實(shí)現(xiàn)負(fù)載均衡一般沒有什么問題。
但是當(dāng)我們在項(xiàng)目中使用的時候,特別有登錄界面的并且端口不是80的時候,會出現(xiàn)登錄的界面無法跳轉(zhuǎn),進(jìn)行調(diào)試的話會出現(xiàn)?net::ERR_NAME_NOT_RESOLVED這樣的錯誤。
出現(xiàn)這個原因的是因?yàn)閚ginx默認(rèn)的端口是80,那么默認(rèn)跳轉(zhuǎn)的也是這個,所以出現(xiàn)這種情況的時候,需要在location 下添加proxy_set_header Host $host:port 這個配置,port 和listen 的端口保持一致就可以了。
推薦閱讀:
SpringBoot + Redis + 注解 + 攔截器來實(shí)現(xiàn)接口冪等性校驗(yàn)
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?

