在阿里云服务器上部署多个 Spring Boot 项目时,如果出现端口冲突问题(例如多个项目都使用默认的 8080 端口),可以通过以下几种方式解决:
✅ 解决方案一:修改每个项目的启动端口
Spring Boot 默认使用 8080 端口,但你可以通过配置文件或命令行参数为每个项目指定不同的端口。
方法1:修改 application.yml 或 application.properties
application.yml
server:
port: 8081
application.properties
server.port=8081
然后依次为每个项目设置不同端口,如:
- 项目A:8081
- 项目B:8082
- 项目C:8083
方法2:启动时通过命令行参数指定端口
java -jar project-a.jar --server.port=8081
java -jar project-b.jar --server.port=8082
java -jar project-c.jar --server.port=8083
推荐使用这种方式,便于部署脚本管理。
✅ 解决方案二:使用 Nginx 反向X_X(推荐)
如果你希望所有项目都能通过 80/443 端口访问(更友好),可以使用 Nginx 做反向X_X,统一入口,内部转发到不同端口。
示例 Nginx 配置:
server {
listen 80;
server_name project-a.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 project-b.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;
}
}
这样用户访问 project-a.example.com 实际请求被转发到本地 8081 端口,无需暴露多个端口。
💡 你还可以用路径区分,比如
/api/a转发到 8081,/api/b转发到 8082。
✅ 解决方案三:使用 Docker 容器隔离
将每个 Spring Boot 项目打包成 Docker 镜像,并通过 Docker 映射不同端口,实现完全隔离。
示例 Docker 命令:
docker run -d -p 8081:8080 --name springboot-a myapp-a:latest
docker run -d -p 8082:8080 --name springboot-b myapp-b:latest
容器内服务仍可用 8080,外部通过宿主机的 8081、8082 访问,互不干扰。
结合 Docker Compose 更易于管理多个服务。
✅ 解决方案四:使用 systemd 或进程管理工具(如 pm2)
通过系统服务管理多个 Java 进程,避免手动启动冲突。
示例:创建 systemd 服务(/etc/systemd/system/springboot-a.service)
[Unit]
Description=Spring Boot App A
After=network.target
[Service]
User=root
ExecStart=/usr/bin/java -jar /opt/project-a/app.jar --server.port=8081
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
然后启用服务:
systemctl enable springboot-a
systemctl start springboot-a
类似地为其他项目创建独立服务。
🔐 安全建议(阿里云相关)
-
安全组配置:
- 只开放必要的端口(如 80、443)。
- 内部服务端口(如 8081~8083)不要对公网开放,只允许本地或 VPC 内访问。
-
使用私有网络通信:多个服务之间调用走内网 IP 和端口,更安全高效。
✅ 总结
| 方案 | 优点 | 适用场景 |
|---|---|---|
| 修改端口 | 简单直接 | 少量项目,测试环境 |
| Nginx 反向X_X | 统一入口,支持域名/路径路由 | 生产环境,对外提供服务 |
| Docker 隔离 | 环境隔离,易于扩展 | 微服务架构,CI/CD 部署 |
| systemd/pm2 | 进程守护,开机自启 | 长期运行的服务 |
✅ 推荐组合方案:
多个 Spring Boot 项目 → 各自使用不同端口(如 8081, 8082)→ 用 Nginx 反向X_X统一通过 80/443 访问 → 阿里云安全组仅开放 80/443。
如有需要,我可以帮你写一个完整的 Nginx + 多 Spring Boot 的部署示例。
CLOUD云枢