加油
努力

如何在阿里云ECS上同时运行两个Web服务?

在阿里云ECS上同时运行两个Web服务是常见需求,有多种可靠、安全且可扩展的方案。以下是推荐的主流方法,按推荐程度和适用场景排序,并附关键操作步骤和注意事项:


✅ 推荐方案:使用反向X_X(Nginx/Apache) + 不同端口/域名(最常用、最灵活)

🌟 优势:

  • 支持同一IP、不同域名(如 site1.comsite2.com)或同一域名不同路径(/app1, /app2
  • 自动处理HTTPS(Let’s Encrypt)、负载均衡、缓存、静态资源优化
  • 后端服务可独立部署、独立升级、互不干扰

🔧 实施步骤:

  1. 为两个Web服务分配不同端口(推荐)

    • 服务A(如Node.js)监听 127.0.0.1:3000
    • 服务B(如Python Flask)监听 127.0.0.1:5000

      ✅ 注意:不要绑定 0.0.0.0:3000 公网暴露,仅内网通信更安全。

  2. 安装并配置 Nginx(作为反向X_X)

    # Ubuntu/Debian
    sudo apt update && sudo apt install nginx -y
    sudo systemctl enable nginx && sudo systemctl start nginx
  3. 创建两个站点配置(以域名方式为例)
    /etc/nginx/conf.d/site1.conf

    server {
        listen 80;
        server_name site1.com;  # 替换为你的域名(需DNS解析到ECS公网IP)
        location / {
            proxy_pass http://127.0.0.1:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    /etc/nginx/conf.d/site2.conf

    server {
        listen 80;
        server_name site2.com;
        location / {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  4. 启用HTTPS(强烈建议)
    使用 Certbot 自动申请免费SSL证书:

    sudo apt install certbot python3-certbot-nginx -y
    sudo certbot --nginx -d site1.com -d www.site1.com
    sudo certbot --nginx -d site2.com -d www.site2.com

    → Certbot 会自动修改 Nginx 配置,添加 HTTPS 重定向。

  5. 启动服务并测试

    sudo nginx -t && sudo systemctl reload nginx
    # 确保你的两个应用已后台运行(如用 pm2、systemd 或 supervisor 管理)

⚙️ 其他可行方案对比

方案 适用场景 优点 缺点 注意事项
不同端口直连
http://IP:8080 & http://IP:8081
快速测试、内网访问、无域名场景 配置极简 ❌ 不安全(暴露端口)、不支持HTTPS、URL丑陋、防火墙需额外放行 安全组必须开放对应端口;生产环境不推荐
Docker + Nginx 反向X_X 微服务、环境隔离强、易迁移 容器化隔离、依赖不冲突、一键部署 学习成本略高 需安装 Docker;推荐用 docker-compose.yml 统一管理
Apache 虚拟主机 已熟悉 Apache 的用户 成熟稳定 配置语法稍复杂,内存占用略高 类似 Nginx,用 <VirtualHost> 实现多站点
同一端口 + 不同路径
/app1/, /app2/
单域名下托管多个子应用 URL统一、便于管理 后端需适配 base path(如 React Router 配置 basename),静态资源路径易出错 需在 proxy_pass 后加路径,如 proxy_pass http://127.0.0.1:3000/app1/;

🔐 关键安全与运维提醒(阿里云ECS专属)

  1. 安全组配置(必做!)

    • ✅ 仅开放:80(HTTP)、443(HTTPS)端口给 0.0.0.0/0
    • 禁止开放 3000500022(SSH)等给公网(除非必要)→ 若需SSH,限制为你的IP段
    • 路径:ECS控制台 → 实例 → 安全组 → 配置规则
  2. 应用进程守护(防止崩溃退出)

    • Node.js:用 pm2
      npm install -g pm2
      pm2 start app1.js --name "site1"
      pm2 start app2.js --name "site2"
      pm2 startup && pm2 save  # 开机自启
    • Python:用 systemdsupervisord
  3. 监控与日志

    • Nginx 访问日志:/var/log/nginx/access.log
    • 应用日志建议输出到文件 + 配合 logrotate
    • 阿里云可观测:接入 ARMS 或 SLS 日志服务

✅ 总结:一句话最佳实践

用 Nginx 做反向X_X,两个Web服务分别监听本地不同端口(如 3000/5000),通过不同域名(site1.com / site2.com)对外提供服务,并强制启用 HTTPS + 严格限制安全组入方向端口。

如需我帮你:

  • ✍️ 生成完整的 docker-compose.yml 示例
  • 🐧 写一个 systemd service 文件模板(适用于 Python/Java/Go)
  • 🌐 配置二级域名(如 blog.mydomain.comapi.mydomain.com
  • 🛑 解决常见报错(如 502 Bad GatewayConnection refused

欢迎随时告诉我你的具体技术栈(如:Vue前端 + Spring Boot后端?还是 WordPress + Next.js?),我可以为你定制详细部署脚本 👇

云服务器