加油
努力

阿里云服务器上如何部署多个网站或应用?

在阿里云服务器上部署多个网站或应用,核心思路是通过 Nginx/Apache 等反向X_X服务器进行端口或域名分流,配合 Docker(可选)实现隔离。以下是主流方案及操作步骤:


✅ 推荐方案一:Nginx + 多域名/多路径虚拟主机(最常用、轻量)

适用于传统 Web 应用(如 PHP、Node.js、Python Flask/Django 等),无需容器化。

步骤:

  1. 安装 Nginx

    # CentOS/RHEL
    sudo yum install nginx -y
    
    # Ubuntu/Debian
    sudo apt update && sudo apt install nginx -y
  2. 规划目录结构

    /var/www/site1      # 对应 www.example.com
    /var/www/site2      # 对应 app.example.com
    /var/www/api        # 对应 api.example.com (可跑 Node/Go 等)
  3. 配置 Nginx 虚拟主机
    创建 /etc/nginx/conf.d/site1.conf

    server {
       listen 80;
       server_name www.example.com;
       root /var/www/site1;
       index index.html index.php;
    
       location / {
           try_files $uri $uri/ /index.php?$query_string;
       }
    
       # 如需 PHP 支持(假设用 PHP-FPM)
       location ~ .php$ {
           fastcgi_pass unix:/run/php/php-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
       }
    }

    创建 /etc/nginx/conf.d/site2.conf(示例为 Node.js 反向X_X):

    server {
       listen 80;
       server_name app.example.com;
    
       location / {
           proxy_pass http://127.0.0.1:3000;  # Node 应用监听端口
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
    }
  4. 启动并测试配置

    sudo nginx -t          # 检查语法
    sudo systemctl reload nginx
  5. DNS 解析 & SSL(重要!)

    • 在阿里云 DNS 控制台为各域名添加 A 记录指向服务器公网 IP。
    • 使用 Let’s Encrypt + certbot 免费申请 HTTPS 证书:
      sudo apt install certbot python3-certbot-nginx
      sudo certbot --nginx -d www.example.com -d app.example.com

✅ 方案二:Docker Compose(适合微服务/多语言混合部署)

优势:环境隔离、依赖管理方便、一键启停。

示例 docker-compose.yml

version: '3'
services:
  site1:
    image: php:8.2-apache
    volumes:
      - ./site1:/var/www/html
    ports:
      - "8081:80"
    networks:
      - web-net

  site2-node:
    build: ./site2
    ports:
      - "8082:3000"
    networks:
      - web-net

  nginx-proxy:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/nginx/certs
    depends_on:
      - site1
      - site2-node
    networks:
      - web-net

networks:
  web-net:

💡 提示:Nginx 作为统一入口,根据 Host 头转发到不同容器内部端口。


✅ 方案三:端口直连(简单但不够优雅)

每个应用监听不同端口(如 80, 8080, 8081),通过浏览器访问 http://ip:8080
⚠️ 缺点:需用户记住端口,不专业;且需开放多个端口到安全组(阿里云 ECS 安全组默认只开 80/443)。


🔐 关键注意事项(阿里云特有)

项目 操作建议
安全组 仅开放必要端口(如 80/443),其他服务端口由内网通信或 SSH 隧道处理
防火墙 若系统自带 firewalld/ufw,确保放行 80/443
日志管理 各站点日志独立输出(如 /var/log/nginx/site1.log),便于排查
备份 定期备份代码 + 数据库(可用阿里云快照或脚本自动化)
监控 启用云监控(CloudMonitor)+ 自定义指标(CPU/内存/QPS)

📌 最佳实践建议

  • 生产环境务必使用 HTTPS(免费证书 + 自动续期)
  • 静态资源(图片/CSS/JS)考虑接入 OSS + CDN 提速
  • 数据库单独部署或使用 RDS(避免与 Web 同机影响性能)
  • 敏感配置(DB 密码、API Key)放入环境变量或阿里云 KMS/SLS 密钥管理

需要我提供某个具体场景的完整配置模板吗?例如:

  • WordPress + Laravel 共存
  • Vue 前端 + Spring Boot 后端分离部署
  • Python Django + Redis + MySQL 全套栈

欢迎告诉我你的技术栈 😊

云服务器