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

負載均衡策略
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 :從服務器接收第一個字節(jié)的時間。 last_byte:從服務器接收完整響應的時間。 last_byte inflight:從服務器接收完整響應的時間。
upstream xuwujing { least_time header; server www.panchengming.com; server www.panchengming2.com; }
6.Random:每個請求將被傳遞到隨機選擇的服務器。如果指定了兩個參數(shù),首先,NGINX根據(jù)服務器權重隨機選擇兩個服務器,然后使用指定的方法選擇其中一個。
least_conn :活動連接的最少數(shù)量 least_time=header (NGINX Plus):從服務器接收響應標頭的最短平均時間 ($upstream_header_time)。 least_time=last_byte (NGINX Plus) :從服務器接收完整響應的最短平均時間($upstream_response_time)。
upstream xuwujing { random two least_time=last_byte; server www.panchengming.com; server www.panchengming2.com; }Nginx+SpringBoot實現(xiàn)負載均衡
環(huán)境準備
依賴JDK1.8以上的版本; 依賴Nginx環(huán)境;
mvn clean package?將項目進行打包為jar文件,然后將application.properties和此jar項目放在一個文件夾中,然后復制該文件夾(這里為了清晰所以進行復制,實際不復制更改端口重啟也行),修改復制文件夾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: 虛擬主機的名稱,一個http中可以配置多個server; listen:Nginx默認的端口; server_name:Nginx服務的地址,可以使用域名,多個用空格分隔。 proxy_pass:代理路徑,一般配置upstream后面的名稱用于實現(xiàn)負載均衡,可以直接配置ip進行跳轉;
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;}}}
負載均衡測試
在完成Nginx配置之后,我們啟動Nginx。
linux輸入/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf,如果已經啟動可以使用/usr/local/nginx/sbin/nginx -s reload命令進行熱加載配置文件,Windows直接點擊Nginx目錄下的nginx.exe或者?cmd運行start nginx進行啟動,如果啟動了依舊可以使用nginx -s reload進行熱加載。
Nginx啟動完成之后,我們依次啟動剛剛下載的springboot和復制更改端口的項目,輸入:java -jar springboot-jsp-thymeleaf.jar啟動。
都啟動成功之后,我們在瀏覽器輸入服務的ip即可進行訪問。
示例圖:

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

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

