入門Nginx之-負載均衡(SpringBoot)

簡介

採用一個SpringBoot後端服務,在不同的端口啓動,以模擬多個服務,這裏以兩個爲例說明;

  • 操作系統:Windows 7

第一步 備好多項服務,啓動

  • 代碼
package com.nginx.loadbalance.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * LoadBalanceController
 */
@RestController
public class LoadBalanceController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/api/v1/serve")
    public String serve() {
        return "This is Server: " + port;
    }

}
  • 啓動

先打包:mvn clean package;然後開啓兩個服務。

java -jar loadbalance-0.0.1-SNAPSHOT.jar --server.port=8000
java -jar loadbalance-0.0.1-SNAPSHOT.jar --server.port=9000

第二步 在 Nginx 中完成負載均衡配置

  • 編輯 Nginx 配置文件,在 nginx.conf 文件中新增upstreamserver節點如下(Linux 一般通過vi /etc/nginx/nginx.conf修改)
    upstream api-server {  
        server 127.0.0.1:8000;
        server 127.0.0.1:9000;
    }
    server {
        listen       80;
        server_name  localhost;

        location /  {
            proxy_pass   http://api-server;
            proxy_redirect default;
        }
    }

第三步 驗證負載均衡

切記,驗證之前先要使用nginx -s reload刷新 Nginx 配置。

訪問http://localhost/api/v1/serve,觀察頁面顯示的信息,將在兩個服務之間按照默認的分發方式進行分發:

  • This is Server: 8000

  • This is Server: 9000

Notes:可能遇到的問題

配置負載均衡,瀏覽器請求時報錯 “HTTP Status 400 – Bad Request”,以下是剛開始報錯的配置信息
    upstream api_server {  
        server 127.0.0.1:8000;
        server 127.0.0.1:9000;
    }
    server {
        listen       80;
        server_name  localhost;

        location /  {
            proxy_pass   http://api_server;
            proxy_redirect default;
        }
    }

可是,nginx -t 測試結果竟然顯示成功,而在後端服務日誌報錯:

2019-06-14-NginxSpringboot.png

  • 原因分析:nginx中upstream後面的名稱不能包含下劃線,與Nginx配置文件中的屬性名衝突(eg:server_name)。
  • 解決方法:去掉下劃線或者以-代替_

至此,基於Nginx與SpringBoot,實現了負載均衡。


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章