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

在阿里云服务器上部署多个 SpringBoot 项目时,端口冲突是一个常见问题。默认情况下,SpringBoot 应用使用 8080 端口,如果多个应用同时启动,就会发生端口占用错误。以下是几种有效的解决方案:


✅ 解决方案一:为每个项目配置不同的端口

这是最简单直接的方法。

步骤:

  1. 修改每个 SpringBoot 项目的 application.yml 或 application.properties 文件,设置不同的 server.port。

示例(application.yml):

# 项目1
server:
  port: 8081
# 项目2
server:
  port: 8082
# 项目3
server:
  port: 8083
  1. 打包并分别运行:
    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 → 映射到 8081
  • http://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

配合不同端口配置,可实现多项目稳定运行。


🔒 补充建议

  1. 防火墙设置:确保阿里云安全组开放所需端口(如 80, 443, 8081-8083 等)。
  2. 健康检查:为每个应用添加 /actuator/health 监控。
  3. 日志管理:将每个应用日志输出到不同文件,便于排查。

✅ 总结

方案 适用场景 推荐度
修改端口 简单测试环境 ⭐⭐⭐
Nginx 反向X_X 生产环境,多项目共存 ⭐⭐⭐⭐⭐
Docker 容器化 微服务架构,易于扩展 ⭐⭐⭐⭐⭐
systemd/supervisor 长期后台运行 ⭐⭐⭐⭐

📌 生产环境强烈推荐:Nginx + 不同端口 + 域名区分

如有域名,还可以配合 SSL(Let’s Encrypt)实现 HTTPS 加密访问。


如果你提供具体部署方式(如是否已有域名、是否使用 Docker),我可以给出更定制化的建议。

未经允许不得转载:CLOUD技术博 » 阿里云服务器部署多个SpringBoot项目端口冲突怎么解决?