在阿里云服务器上使用 Nginx 实现 Spring Boot 多项目部署,是一种常见且高效的架构方式。下面详细介绍如何通过 Nginx 反向X_X实现多个 Spring Boot 项目的部署。
✅ 一、总体思路
- 每个 Spring Boot 项目独立运行在不同端口(如 8080、8081、8082)。
- 使用 Nginx 作为反向X_X服务器,监听 80(HTTP)或 443(HTTPS)端口。
- 根据域名或路径将请求转发到对应的 Spring Boot 服务。
✅ 二、环境准备
- 阿里云 ECS 服务器(Linux 系统,如 CentOS/Ubuntu)
- Java 运行环境(JDK 8+)
- 已打包的多个 Spring Boot 项目(
jar文件) - Nginx 安装并配置好
✅ 三、部署多个 Spring Boot 项目
1. 启动多个 Spring Boot 应用(不同端口)
假设你有两个项目:
project-a.jar→ 监听8080project-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 &
推荐使用
systemd或supervisor来管理进程,更稳定。
✅ 四、Nginx 配置多项目访问
方式一:基于 域名 分发(推荐)
场景:
api.projecta.com→ 转发到 8080api.projectb.com→ 转发到 8081
步骤:
- 解析两个域名到你的服务器公网 IP。
- 修改 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/→ 转发到 8080your-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云枢