在阿里云服务器上部署多个 Spring Boot 项目时,如果出现端口冲突,是因为多个应用默认都使用了相同的端口(如 8080)。解决这个问题的核心是 为每个 Spring Boot 项目配置不同的启动端口。以下是详细的解决方案:
✅ 解决方案一:修改每个项目的 application.yml 或 application.properties
这是最常见且推荐的做法。
方法1:使用 application.yml
server:
port: 8081 # 第一个项目用 8080,第二个用 8081,第三个用 8082...
方法2:使用 application.properties
server.port=8082
每个项目分别设置不同的端口号,例如:
- 项目A:8080
- 项目B:8081
- 项目C:8082
✅ 解决方案二:通过启动命令指定端口(灵活、推荐用于部署)
在启动 JAR 包时通过命令行参数覆盖配置文件中的端口:
java -jar project-a.jar --server.port=8080
java -jar project-b.jar --server.port=8081
java -jar project-c.jar --server.port=8082
这种方式无需修改配置文件,适合生产环境灵活部署。
✅ 解决方案三:使用 Nginx 反向X_X(推荐用于生产环境)
如果你希望多个项目都能通过 80 或 443 端口访问,可以使用 Nginx 做反向X_X,将不同域名或路径映射到不同后端服务。
示例 Nginx 配置:
server {
listen 80;
server_name api.projecta.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen 80;
server_name api.projectb.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
这样用户访问的是域名,而实际请求被转发到不同端口的 Spring Boot 应用,避免了端口暴露和冲突。
✅ 解决方案四:使用 Docker 容器隔离(高级推荐)
将每个 Spring Boot 项目打包成 Docker 镜像,通过容器运行,利用 Docker 的端口映射机制隔离服务。
示例 Docker 命令:
docker run -d -p 8080:8080 project-a
docker run -d -p 8081:8080 project-b # 容器内8080映射到宿主机8081
优势:
- 环境隔离
- 端口自由映射
- 易于管理与扩展
✅ 如何检查端口是否被占用?
在部署前可先检查端口占用情况:
netstat -tuln | grep 8080
# 或
lsof -i :8080
如果被占用,可杀掉进程:
kill -9 $(lsof -t -i:8080)
总结建议:
| 场景 | 推荐方案 |
|---|---|
| 测试/开发环境 | 修改 application.yml 或启动命令指定端口 |
| 生产环境 | Nginx 反向X_X + 不同端口启动 |
| 大规模部署 | Docker + Nginx |
| 多域名访问 | Nginx 配置基于域名的路由 |
✅ 最终建议组合方案:
- 每个 Spring Boot 项目使用不同端口启动(如 8080, 8081...)
- 使用 Nginx 反向X_X统一入口
- 配合域名实现优雅访问
这样既解决了端口冲突,又提升了安全性和可维护性。
如有更多需求(如 HTTPS、负载均衡),也可继续扩展 Nginx 配置。
CLOUD云计算