在阿里云服务器上部署多个 SpringBoot 项目时,端口冲突是一个常见问题。默认情况下,SpringBoot 应用使用 8080 端口,如果多个应用同时启动,就会发生端口占用错误。以下是几种有效的解决方案:
✅ 解决方案一:为每个项目配置不同的端口
这是最简单直接的方法。
步骤:
- 修改每个 SpringBoot 项目的
application.yml或application.properties文件,设置不同的server.port。
示例(application.yml):
# 项目1
server:
port: 8081
# 项目2
server:
port: 8082
# 项目3
server:
port: 8083
- 打包并分别运行:
java -jar project1.jar java -jar project2.jar java -jar project3.jar
✅ 优点:简单、快速
⚠️ 缺点:外部访问需要记住不同端口
✅ 解决方案二:使用 Nginx 反向X_X(推荐)
通过 Nginx 将不同域名或路径映射到不同端口的 SpringBoot 应用,对外统一使用 80/443 端口。
配置示例:
假设你有两个项目:
- 项目A:运行在
localhost:8081 - 项目B:运行在
localhost:8082
Nginx 配置 /etc/nginx/conf.d/projects.conf:
server {
listen 80;
server_name project1.example.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name project2.example.com;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
🌐 外部访问:
http://project1.example.com→ 映射到 8081http://project2.example.com→ 映射到 8082
✅ 优点:
- 用户无需记忆端口号
- 支持 HTTPS、负载均衡、缓存等高级功能
- 更安全(隐藏后端端口)
🔧 前提:需安装 Nginx 并配置域名解析(或本地 hosts 测试)
✅ 解决方案三:使用 Docker 容器隔离
每个 SpringBoot 项目运行在独立的 Docker 容器中,容器内使用 8080 端口,但映射到宿主机的不同端口。
示例 Dockerfile:
FROM openjdk:17-jre
COPY target/app1.jar app1.jar
EXPOSE 8080
CMD ["java", "-jar", "app1.jar"]
启动容器:
docker run -d -p 8081:8080 --name app1 app1-image
docker run -d -p 8082:8080 --name app2 app2-image
✅ 优点:
- 环境隔离,避免依赖冲突
- 端口灵活映射
- 易于扩展和管理
✅ 解决方案四:使用进程管理工具(如 PM2)
虽然 PM2 主要用于 Node.js,但也可以通过插件运行 Java 应用。更推荐使用 systemd 或 supervisor。
使用 systemd 管理多个 SpringBoot 进程:
创建服务文件 /etc/systemd/system/springboot-app1.service:
[Unit]
Description=Spring Boot App 1
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/app1/app1.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
然后启用并启动:
systemctl enable springboot-app1
systemctl start springboot-app1
配合不同端口配置,可实现多项目稳定运行。
🔒 补充建议
- 防火墙设置:确保阿里云安全组开放所需端口(如 80, 443, 8081-8083 等)。
- 健康检查:为每个应用添加
/actuator/health监控。 - 日志管理:将每个应用日志输出到不同文件,便于排查。
✅ 总结
| 方案 | 适用场景 | 推荐度 |
|---|---|---|
| 修改端口 | 简单测试环境 | ⭐⭐⭐ |
| Nginx 反向X_X | 生产环境,多项目共存 | ⭐⭐⭐⭐⭐ |
| Docker 容器化 | 微服务架构,易于扩展 | ⭐⭐⭐⭐⭐ |
| systemd/supervisor | 长期后台运行 | ⭐⭐⭐⭐ |
📌 生产环境强烈推荐:Nginx + 不同端口 + 域名区分
如有域名,还可以配合 SSL(Let’s Encrypt)实现 HTTPS 加密访问。
如果你提供具体部署方式(如是否已有域名、是否使用 Docker),我可以给出更定制化的建议。
CLOUD技术博