在阿里云ECS(弹性计算服务)上实现一个服务器绑定多个Web服务,有多种方式可以实现。以下是常见的几种方法,根据你的需求选择合适的方案:
✅ 方法一:基于端口区分多个Web服务
每个Web服务监听不同的端口号。
示例:
- Web服务A:监听
8080端口 - Web服务B:监听
8081端口 - Web服务C:监听
3000端口
配置步骤:
- 启动多个Web服务,分别绑定不同端口。
- 在阿里云 安全组规则 中开放这些端口(如 8080、8081、3000)的公网访问权限。
- 外部通过
http://<ECS公网IP>:8080访问服务A,http://<ECS公网IP>:8081访问服务B。
✅ 优点:简单直接
❌ 缺点:URL中带端口号不美观,不适合生产环境面向用户
✅ 方法二:使用反向X_X(推荐 — Nginx)
通过 Nginx 实现基于域名或路径的反向X_X,将请求分发到不同后端服务。
场景示例:
www.site-a.com→ 转发到本地localhost:8080www.site-b.com→ 转发到本地localhost:8081api.example.com→ 转发到localhost:3000
步骤:
-
安装 Nginx
# Ubuntu/Debian sudo apt update && sudo apt install nginx -y # CentOS/RHEL sudo yum install nginx -y -
启动并设置开机自启
sudo systemctl start nginx sudo systemctl enable nginx -
配置 Nginx 虚拟主机
编辑配置文件(如
/etc/nginx/sites-available/site-a):server { listen 80; server_name www.site-a.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 www.site-b.com; location / { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } -
启用站点(符号链接)
sudo ln -s /etc/nginx/sites-available/site-a /etc/nginx/sites-enabled/ -
测试并重载 Nginx
sudo nginx -t # 检查语法 sudo systemctl reload nginx -
域名解析
- 将
www.site-a.com和www.site-b.com的 DNS A 记录指向 ECS 的公网 IP。
- 将
-
安全组放行 HTTP (80) 端口
✅ 优点:用户体验好(标准域名)、支持 HTTPS、可扩展性强
✅ 推荐用于生产环境
✅ 方法三:基于路径的路由(单域名多服务)
适用于多个服务共用一个域名,通过路径区分。
示例:
https://example.com/app1→ 转发到http://localhost:8080https://example.com/app2→ 转发到http://localhost:8081
Nginx 配置片段:
server {
listen 80;
server_name example.com;
location /app1/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
}
location /app2/ {
proxy_pass http://127.0.0.1:8081/;
proxy_set_header Host $host;
}
}
✅ 适合前后端分离或微前端架构
✅ 方法四:使用 Docker + Nginx(更高级)
将每个Web服务打包为Docker容器,通过 Docker Compose 管理,并统一由 Nginx 反向X_X。
示例结构:
# docker-compose.yml
version: '3'
services:
web1:
image: my-web-app-1
ports:
- "8080"
web2:
image: my-web-app-2
ports:
- "8081"
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web1
- web2
✅ 优势:隔离性好、易于部署和维护
🔐 补充建议
-
开启HTTPS:
使用 Let’s Encrypt 免费证书配合 Certbot 自动配置 SSL:sudo certbot --nginx -d www.site-a.com -d www.site-b.com -
安全组配置:
- 开放 80(HTTP)、443(HTTPS)
- 关闭不必要的端口(如 8080、8081 等后端端口不暴露公网)
-
防火墙(可选):
使用ufw或firewalld进一步限制访问。
总结
| 方法 | 适用场景 | 是否推荐 |
|---|---|---|
| 不同端口访问 | 测试、开发 | ⚠️ 一般 |
| Nginx 基于域名X_X | 多个独立网站 | ✅ 强烈推荐 |
| Nginx 基于路径X_X | 单域名多应用 | ✅ 推荐 |
| Docker + Nginx | 容器化部署 | ✅ 推荐 |
如有具体技术栈(如 Node.js、Python Flask、Spring Boot 等),可进一步提供配置示例。
云小栈