使用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
我没有遇到任何问题,已经成功分发并获取了返回值。
提供参考资料