在阿里云服务器上使用 Nginx 部署多个 Web 项目,是常见的需求。你可以通过配置 Nginx 的虚拟主机(Virtual Host)来实现一个服务器部署多个网站或 Web 应用。以下是详细步骤和配置示例。
✅ 前提条件
- 已有一台阿里云 ECS 实例
- 已安装 Nginx(可通过
sudo apt install nginx或yum install nginx安装) - 多个 Web 项目已部署在服务器上(如 Node.js、Python、Java Spring Boot、静态 HTML 等)
- 每个项目监听不同的端口或路径
- 域名可选(也可用 IP + 端口访问)
📌 部署方式一:基于不同域名(推荐)
每个项目绑定独立的域名,通过 Nginx 反向分发请求。
示例场景:
| 项目 | 域名 | 本地端口 |
|---|---|---|
| 项目A | www.site-a.com | 3000 |
| 项目B | www.site-b.com | 4000 |
| 项目C | api.site-a.com | 5000 |
步骤:
-
确保域名已解析到服务器公网 IP
- 在阿里云 DNS 控制台添加 A 记录指向你的 ECS 公网 IP。
-
启动并测试 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx
- 创建 Nginx 配置文件
进入站点配置目录:
cd /etc/nginx/sites-available/
注意:Ubuntu/Debian 默认有
sites-available和sites-enabled目录。CentOS/RHEL 默认在/etc/nginx/conf.d/下,直接放.conf文件即可。
创建 site-a.com 配置
sudo nano /etc/nginx/sites-available/site-a
内容如下:
server {
listen 80;
server_name www.site-a.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
}
}
创建 site-b.com 配置
sudo nano /etc/nginx/sites-available/site-b
server {
listen 80;
server_name www.site-b.com;
location / {
proxy_pass http://127.0.0.1:4000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
创建 API 子域名配置
sudo nano /etc/nginx/sites-available/api-site-a
server {
listen 80;
server_name api.site-a.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 启用站点(Ubuntu/Debian)
sudo ln -s /etc/nginx/sites-available/site-a /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site-b /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/api-site-a /etc/nginx/sites-enabled/
# 删除默认站点(可选)
sudo rm /etc/nginx/sites-enabled/default
CentOS 用户直接将
.conf文件放入/etc/nginx/conf.d/即可自动加载,无需软链接。
例如:
sudo cp site-a /etc/nginx/conf.d/site-a.conf
- 测试配置并重启 Nginx
sudo nginx -t # 测试语法
sudo systemctl reload nginx
- 开放安全组端口
登录阿里云控制台 → 安全组 → 添加规则,放行 80 端口(HTTP) 和 443(HTTPS,后续可用)
📌 部署方式二:基于路径(单域名多项目)
适用于共用一个域名,通过路径区分项目。
示例:
example.com/web1→ 项目1(端口 3000)example.com/web2→ 项目2(端口 4000)example.com/api→ 后端接口(端口 5000)
配置示例:
server {
listen 80;
server_name example.com;
location /web1/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /web2/ {
proxy_pass http://127.0.0.1:4000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api/ {
proxy_pass http://127.0.0.1:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 根路径可指向静态页面或其他
location / {
root /var/www/html;
index index.html;
}
}
注意:
proxy_pass后面加/很重要,会影响路径转发行为。
🔐 可选:配置 HTTPS(SSL 证书)
使用 Let’s Encrypt 免费证书:
sudo certbot --nginx -d www.site-a.com -d api.site-a.com
或手动配置 SSL:
listen 443 ssl;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
✅ 常见问题排查
| 问题 | 解决方案 |
|---|---|
| 502 Bad Gateway | 检查后端服务是否运行,端口是否正确 |
| 静态资源 404 | 检查 proxy_pass 是否带 /,或静态资源配置是否正确 |
| 域名无法访问 | 检查 DNS 解析、安全组、Nginx 配置 |
| Nginx 启动失败 | 使用 nginx -t 查看错误日志 /var/log/nginx/error.log |
🧩 补充建议
- 使用 PM2 管理 Node.js 项目:
pm2 start app.js --name "web1" - 使用 systemd 管理 Java/Spring Boot 应用
- 定期备份 Nginx 配置
- 使用
upstream负载均衡(高级场景)
✅ 总结
通过 Nginx 的 server_name 或 location 规则,可以轻松实现一台阿里云服务器部署多个 Web 项目。推荐使用多域名反向方式,清晰易维护。
如果你提供具体项目类型(如 Vue、React、Spring Boot、Django),我可以给出更精确的配置模板。
需要我生成一个完整配置文件模板吗?
ECLOUD博客