使用nginx對spring boot項目進行代理


摘要:使用nginx對spring boot項目進行反向代理,並且使用輪詢均衡負載策略

均衡負載與集群

集群和均衡都涉及到多個機器提供的服務的問題

不同點是,集群是互相通信、協同的的多個服務,服務之前能夠狀態共享。而均衡負載一般說的是,服務之間相互獨立,不知道彼此。因此,使用均衡負載最好是提供的無狀態的服務,如果服務有狀態,那么就需要一個統一管理狀態的服務單獨部署

搭建過程

相關工具

  • 使用spring boot快速搭建一個web項目
  • virtual box作為虛擬機,並安裝docker
  • 獨立安裝nginx,對docker容器進行反向代理

spring boot項目

只需要添加spring-boot-starter-web依賴即可,並且添加如下代碼

package com.luzj.mychdocker10;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author luzj
 * @description:
 * @date 2018/7/27
 */
@RestController
public class IndexController {
    @RequestMapping("/index")
    public String index(){
        return "hello docker 1";
    }

    @RequestMapping("/tips")
    public String tips(){
        return "是莉娜呀!!!";
    }
}

然后將項目打包,之后修改上面index()的代碼,使返回不同的字符串,這樣便於觀察nginx是否將請求分發到每一個服務上面去

服務2代碼

  @RequestMapping("/index")
    public String index(){
        return "hello docker 2";
    }

服務3代碼

  @RequestMapping("/index")
    public String index(){
        return "hello docker 3";
    }

分別將3個服務打成jar,待之后部署到docker上,分別是mychdocker10-0.0.1-SNAPSHOT.jar,mychdocker10-0.0.2-SNAPSHOT.jar,mychdocker10-0.0.3-SNAPSHOT.jar

docker+nginx部署項目

docker和nginx全部部署在virtual box上。其中docker部署用來部署前面的jar包,而nginx單獨部署,對三個docker容器代理。

之所以nginx單獨部署,是因為單獨拉取的nginx鏡像無法使用vim編寫配置文件。

使用docker部署jar包

# 在 /home/<username>/目錄下新建 dockerdir目錄
mkdir -p /home/<username>/dockerdir

# 將jar包拷入dockerdir中

# 編寫Dockerfile
vim Dockerfile

# Dockerfile內容
FROM java:8
add mychdocker10-0.0.3-SNAPSHOT.jar  app.jar
expose 8080
entrypoint ["java","-jar","/app.jar"]

# 編譯docker鏡像,balancejar 為鏡像名稱, . 表示當前目錄
docker build -t balancejar .

# 運行容器,8081:8080表示將docker內部8080端口映射到宿主機的8081端口,docker的宿主機就是virtual box,之后還需要對virtual box再進行一次映射,映射到本機
docker run -d -p 8081:8080 --name balanceContainer balancejar

另外兩個jar的的部署方式和上面的一樣,分別映射到8082和8083端口

docker鏡像列表:
image

docker容器列表:
imags

virtual box端口映射

我們的docker是安裝在virtual box上面的,如果想讓本機可以訪問,還需要將虛擬機的端口映射到宿主機的端口

選擇[控制]->[設置]->[網絡]->[端口轉發],即可見端口映射配置面板,如下圖

image

查看docker部署結果

image
可以看到直接在本機上可以訪問了

配置nginx

nginx打開配置文件

vim /usr/local/nginx/conf/nginx.conf

添加如下配置信息到http模塊里面

# 配置代理server組,標識為Tomcat
upstream tomcat {
      server  127.0.0.1:8081 weight=10;
      server  127.0.0.1:8082 weight=10;
      server  127.0.0.1:8083 weight=10;
}

server {
        listen 80; # 默認監聽端口80
        server_name  cc520.me;# 對外服務名
        
        # ...其他配置信息
        
        # 配置代理路徑
        location /docker{
                proxy_pass http://tomcat/;
        }

        # 對“/”路徑轉發 /docker
        location = / {
        return 302 /docker;
        }
    # ...其他配置信息
}


映射nginx監聽端口

將virtual box 80端口映射到本機

訪問nginx進行驗證

依次訪問http://cc520.me/docker/index3次,可以看到如下結果

第一次
image

第二次
image

第三次
image

可以看到nginx使用默認的輪詢策略進行服務分發,訪問3次,依次訪問了代理的3個服務

小結

我們使用docker部署springboot項目,之后使用nginx對3個docker容器進行代理,最后在瀏覽器訪問查看nginx是否對springboot項目進行均衡負載

參考

nginx官方文檔

docker官方文檔

《springboot實戰-汪雲飛》

使用Nginx實現Tomcat集群負載均衡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM