nignx實現多埠負載均衡例項
阿新 • • 發佈:2018-12-24
首先配置要去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配置即可
這樣多埠負載均衡做出來了