在阿里云服务器上部署多个 Spring Boot 项目时,如果出现端口冲突,主要是因为多个 Spring Boot 应用默认都使用 8080 端口。以下是几种常见且有效的解决方案:
✅ 解决方案一:修改每个项目的端口(最简单常用)
Spring Boot 项目通过配置文件指定不同的端口即可避免冲突。
方法:
在每个项目的 application.yml 或 application.properties 中设置不同的 server.port。
示例(application.yml):
server:
port: 8081
或(application.properties):
server.port=8082
部署建议:
- 项目A:
8081 - 项目B:
8082 - 项目C:
8083 - …
这样多个项目就可以同时运行,互不干扰。
⚠️ 注意:确保这些端口在阿里云安全组中已开放(如需网络访问)。
✅ 解决方案二:使用 Nginx 反向X_X + 统一入口
如果你希望所有项目都能通过 80 或 443 端口访问,可以使用 Nginx 做反向X_X。
架构:
用户请求 → Nginx (监听80) → 转发到不同后端服务(8081, 8082...)
示例 Nginx 配置:
server {
listen 80;
server_name project1.example.com;
location / {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name project2.example.com;
location / {
proxy_pass http://localhost:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
优点:
- 外部访问统一使用 80/443 端口。
- 更安全(隐藏后端端口)。
- 支持 HTTPS、负载均衡、静态资源等。
✅ 解决方案三:使用 Docker 容器隔离
每个 Spring Boot 项目打包成 Docker 镜像,容器内使用 8080 端口,宿主机映射不同端口。
示例 Docker 命令:
# 项目A 映射到宿主机 8081
docker run -d -p 8081:8080 --name springboot-app1 myapp1:latest
# 项目B 映射到宿主机 8082
docker run -d -p 8082:8080 --name springboot-app2 myapp2:latest
优点:
- 环境隔离,避免依赖冲突。
- 端口灵活映射。
- 易于管理与扩展。
可结合 Docker Compose 管理多个服务。
✅ 解决方案四:使用进程管理工具(如 pm2)
虽然 pm2 主要用于 Node.js,但也可用于管理 Java 进程(需配合脚本),不过更推荐使用 systemd 或 supervisor。
推荐:使用 systemd 管理多个 Spring Boot 进程
创建多个 .service 文件,分别启动不同 JAR 并指定不同端口。
示例:/etc/systemd/system/app1.service
[Unit]
Description=Spring Boot App1
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar -Dserver.port=8081 /opt/app1/app1.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
然后启用服务:
systemctl enable app1.service
systemctl start app1
🔐 补充:阿里云安全组配置
无论使用哪种方式,确保你使用的端口在 阿里云控制台的安全组规则 中已放行:
- 登录 阿里云 ECS 控制台
- 找到实例 → 安全组 → 配置规则
- 添加入方向规则,开放你需要的端口(如 8081、8082、80、443 等)
✅ 总结:推荐做法
| 场景 | 推荐方案 |
|---|---|
| 简单测试部署 | 修改 server.port |
| 多个项目对外提供服务 | Nginx 反向X_X + 不同端口 |
| 生产环境、易于维护 | Docker + Nginx |
| 需要开机自启、进程守护 | systemd 或 Docker |
如有更多需求(如域名、HTTPS、负载均衡),可进一步结合 Nginx + SSL + 多实例部署。
需要我帮你写一个完整的 Nginx + 多 Spring Boot 的部署示例吗?
云计算导航