1. 程式人生 > >nignx實現多埠負載均衡例項

nignx實現多埠負載均衡例項

首先配置要去nignx.conf的配置裡去配置多埠實現

在http模組裡面寫上如下配置:

upstream是nignx分配方式,當前預設是輪詢

1.輪詢:輪詢是upstream的預設分配方式,即每個請求按照時間順序輪流分配到不同的後端伺服器,如果某個後端伺服器down掉後,能自動剔除。

2.weight(輪詢的增強):即可以指定輪詢比率,weight和訪問機率成正比,主要應用於後端伺服器異質的場景下。

3.ip_hash :每個請求按照訪問ip(即Nginx的前置伺服器或者客戶端IP)的hash結果分配,這樣每個訪客會固定訪問一個後端伺服器,可以解決session一致問題。

4.fair :  fair顧名思義,公平地按照後端伺服器的響應時間(rt)來分配請求,響應時間短即rt小的後端伺服器優先分配請求。

5.url_hash:與ip_hash類似,但是按照訪問url的hash結果來分配請求,使得每個url定向到同一個後端伺服器,主要應用於後端伺服器為快取時的場景下。

#分配方式  預設是輪詢 即每個請求按照時間順序輪流分配到不同的後端伺服器,
	#如果某個後端伺服器down掉後,能自動剔除。
	upstream demo{
	    server 192.168.0.101:8080;
		server 192.168.0.101:8181;
	}

 

在http裡的server模組裡面寫上如下配置 

 listen       8090; #代理後要訪問的埠
 server_name  localhost;  #指定訪問的連線
 location / {
          proxy_pass  http://demo;  #代理轉發
	  #proxy_redirect http://host:8080 http://$host:$server_port;
 }

然後啟動一個服務(程式碼示例)埠是8080都可以,如果是一個伺服器的話就再用命令啟動一個,埠不一樣即可

@RestController
public class test {
    @RequestMapping("/")
    public int  test(ServletRequest request){
        System.out.println(request.getLocalAddr());
        System.out.println(request.getLocalPort());
        return request.getLocalPort();

    }
}

然後服務啟動成功,需要用到nginx裡配置的server_name名稱和listen埠來請求我們的服務

 

因為是隨機訪問的,有時候nginx會訪問8080的埠,有時候會訪問8181埠,怎麼樣很神奇把,怪不得都在用nginx做負載均衡和反向代理呢,很棒

當然,來回切換伺服器,會導致,session不共享,最簡單的跨域解決辦法根據請求的ip地址,去取一個hash,根據ip地址的hash會將的請求發到同一臺伺服器  

upstream demo{
	  ip_hash;
	  server 192.168.0.101:8080;
	  server 192.168.0.101:8181;
}

然後用命令重新載入nginx配置即可  

這樣多埠負載均衡做出來了