SpringBoot项目在阿里云服务器上如何通过Nginx实现多项目部署?

在阿里云服务器上使用 Nginx 实现 Spring Boot 多项目部署,是一种常见且高效的架构方式。下面详细介绍如何通过 Nginx 反向X_X实现多个 Spring Boot 项目的部署。


✅ 一、总体思路

  1. 每个 Spring Boot 项目独立运行在不同端口(如 8080、8081、8082)。
  2. 使用 Nginx 作为反向X_X服务器,监听 80(HTTP)或 443(HTTPS)端口。
  3. 根据域名或路径将请求转发到对应的 Spring Boot 服务。

✅ 二、环境准备

  • 阿里云 ECS 服务器(Linux 系统,如 CentOS/Ubuntu)
  • Java 运行环境(JDK 8+)
  • 已打包的多个 Spring Boot 项目(jar 文件)
  • Nginx 安装并配置好

✅ 三、部署多个 Spring Boot 项目

1. 启动多个 Spring Boot 应用(不同端口)

假设你有两个项目:

  • project-a.jar → 监听 8080
  • project-b.jar → 监听 8081
# 启动 project-a
nohup java -jar project-a.jar --server.port=8080 > project-a.log 2>&1 &

# 启动 project-b
nohup java -jar project-b.jar --server.port=8081 > project-b.log 2>&1 &

推荐使用 systemdsupervisor 来管理进程,更稳定。


✅ 四、Nginx 配置多项目访问

方式一:基于 域名 分发(推荐)

场景:

  • api.projecta.com → 转发到 8080
  • api.projectb.com → 转发到 8081

步骤:

  1. 解析两个域名到你的服务器公网 IP。
  2. 修改 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/)。

创建两个配置文件(或一个文件中写两个 server 块):

# /etc/nginx/conf.d/project-a.conf
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;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# /etc/nginx/conf.d/project-b.conf
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;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

方式二:基于 路径 分发

场景:

  • your-domain.com/api-a/ → 转发到 8080
  • your-domain.com/api-b/ → 转发到 8081
server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名或公网IP

    location /api-a/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /api-b/ {
        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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

注意:proxy_pass 后面加 / 表示路径重写,/api-a/xxx 会转发为 http://127.0.0.1:8080/xxx


✅ 五、测试与启动 Nginx

# 测试配置是否正确
sudo nginx -t

# 重新加载配置
sudo nginx -s reload

✅ 六、开放防火墙端口(阿里云安全组)

确保以下端口在阿里云 安全组规则 中已开放:

  • 80(HTTP)
  • 443(HTTPS,如果启用 SSL)
  • 22(SSH,用于远程连接)

Spring Boot 内部端口(如 8080、8081)不需要对外暴露,只允许本地访问即可。


✅ 七、启用 HTTPS(可选)

使用 Let’s Encrypt 免费证书:

# 安装 certbot
sudo apt install certbot python3-certbot-nginx

# 获取证书(替换为你的域名)
sudo certbot --nginx -d api.projecta.com -d api.projectb.com

Certbot 会自动修改 Nginx 配置并启用 HTTPS。


✅ 八、进程管理建议(进阶)

避免使用 nohup,推荐使用:

1. systemd 服务(推荐)

创建 /etc/systemd/system/project-a.service

[Unit]
Description=Project A
After=syslog.target

[Service]
User=root
ExecStart=/usr/bin/java -jar /root/project-a.jar --server.port=8080
Restart=always

[Install]
WantedBy=multi-user.target

然后:

systemctl enable project-a
systemctl start project-a

✅ 总结

方法 说明
域名分发 适合多个独立服务,SEO友好
路径分发 适合同一主站下的微服务模块
Nginx 反向X_X 统一入口,隐藏后端端口,提升安全性
HTTPS 提高安全性,避免浏览器警告

最终效果

  • 用户访问 https://api.projecta.com → 请求被 Nginx 转发到 localhost:8080
  • 用户访问 https://api.projectb.com → 请求被 Nginx 转发到 localhost:8081

如有更多需求(如负载均衡、静态资源托管、跨域处理),也可以在 Nginx 层统一处理。

需要我提供完整脚本或自动化部署方案吗?

未经允许不得转载:CLOUD云枢 » SpringBoot项目在阿里云服务器上如何通过Nginx实现多项目部署?