使用NGINX进行请求的负载均衡

首先

我以前在一篇文章中创建了一个使用SpringBoot的多项目结构的应用程序。
接下来,我将尝试实现使用NGINX作为端点,并将请求分发给每个SpringBoot应用程序。

环境

Java: 17
SpringBoot: 3.1.1
Gradle: 8.1.1
NGINX: 1.25.1
项目: 多项目(前一篇文章的项目)

1. 整体形象

将Docker相关的源代码配置如下图所示。

multi-project(ルートプロジェクト)
│
├── docker
│   ├── nginx/volumes/etc/nginx/conf.d
│   │   └── nginx.conf
│   │
│   ├── docker-compose.yml
│   └── docker-up.sh
│       
├── multi-project-A(サブモジュールプロジェクト)
│       
└── multi-project-B(サブモジュールプロジェクト)

2. 启动 NGINX 容器

创建docker-compose.yml文件

为了启动NGINX容器,创建一个docker-compose.yml文件。
根据配置文件的位置和NGINX监听的端口进行相应的设置。

version: "3"

services:

  nginx:
    image: nginx:1.25.1
    container_name: nginx-container
    ports:
      - "80:80"
    volumes:
      - ./nginx/volumes/etc/nginx/conf.d:/etc/nginx/conf.d

创建一个nginx.conf文件

接下来,我们将创建一个名为“nginx.conf”的配置文件。
通过在80号端口监听,确定如何将URL的内容分发到应用程序中。

server {
    listen 80;

    location /multi-project-A {
        rewrite /multi-project-A/(.*) /$1 break;
        proxy_pass http://host.docker.internal:60;
    }

    location /multi-project-B {
        rewrite /multi-project-B/(.*) /$1 break;
        proxy_pass http://host.docker.internal:70;
    }
}

在分发时使用rewrite,
http://localhost/multi-project-A/sampleA

http://localhost:60/sampleA
然后将请求发送到应用程序这样。

启动容器

使用docker-compose命令启动docker容器。

echo 作業ディレクトリに移動
cd ~/workspace/multi-project/docker/

echo dockerを起動
docker-compose -f docker-compose.yml -p multi-project up --build -d

3. 启动SpringBoot应用程序

设定端口

由于本次是在主机端运行SpringBoot应用程序,因此需要对端口进行设置,以确保它们不会相互冲突。

多项目A

server:
  port: 60

多项目-B

server:
  port: 70

打开应用

使用Gradle任务的bootRun来运行SpringBoot应用程序。

% ./gradlew :multi-project-A:bootRun
% ./gradlew :multi-project-B:bootRun

动作确认

最终,我将向NGINX发送请求。
我将通过URL模式来确认请求是否会被分配到各个服务器上。

% curl http://localhost/multi-project-A/sampleA
hello worldA
% curl http://localhost/multi-project-B/sampleB
hello worldB

我没有遇到任何问题,已经成功分发并获取了返回值。

提供参考资料

 

广告
将在 10 秒后关闭
bannerAds