走啊走
加油

阿里云服务器部署多个SpringBoot项目端口冲突怎么解决?

服务器价格表

在阿里云服务器上部署多个 Spring Boot 项目时,如果出现端口冲突,是因为多个应用默认都使用了相同的端口(如 8080)。解决这个问题的核心是 为每个 Spring Boot 项目配置不同的启动端口。以下是详细的解决方案:


✅ 解决方案一:修改每个项目的 application.ymlapplication.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(推荐用于生产环境)

如果你希望多个项目都能通过 80443 端口访问,可以使用 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 配置基于域名的路由

最终建议组合方案:

  1. 每个 Spring Boot 项目使用不同端口启动(如 8080, 8081...)
  2. 使用 Nginx 反向X_X统一入口
  3. 配合域名实现优雅访问

这样既解决了端口冲突,又提升了安全性和可维护性。

如有更多需求(如 HTTPS、负载均衡),也可继续扩展 Nginx 配置。