加油
努力

如何在轻量应用服务器上安全地托管多个网站?

在轻量应用服务器(如阿里云轻量应用服务器、腾讯云轻量服务器等)上安全地托管多个网站,需要从系统安全、网络隔离、资源管理、数据保护和监控维护等多个方面进行配置。以下是详细的安全实践指南:


一、基础系统安全设置

  1. 更新系统与软件

    sudo apt update && sudo apt upgrade -y  # Ubuntu/Debian
    sudo yum update -y                      # CentOS/RHEL

    定期更新系统内核和软件包,防止已知漏洞被利用。

  2. 创建非 root 用户并禁用 root 登录

    adduser deploy
    usermod -aG sudo deploy

    编辑 /etc/ssh/sshd_config

    PermitRootLogin no
    PasswordAuthentication no  # 推荐使用密钥登录

    然后重启 SSH:sudo systemctl restart sshd

  3. 配置防火墙(UFW 或 firewalld)

    sudo ufw allow OpenSSH
    sudo ufw allow 'Nginx Full'
    sudo uuf enable

    只开放必要的端口(80, 443, 22),关闭其他端口。

  4. 启用自动安全更新
    安装 unattended-upgrades

    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure -plow unattended-upgrades

二、使用反向X_X实现多站点托管(推荐 Nginx)

  1. 安装 Nginx

    sudo apt install nginx
  2. 为每个网站创建独立的配置文件
    示例:/etc/nginx/sites-available/site1.com

    server {
        listen 80;
        server_name site1.com www.site1.com;
    
        location / {
            proxy_pass http://127.0.0.1:3001;  # 转发到本地 Node.js 应用
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }

    启用站点:

    sudo ln -s /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
  3. 使用不同端口或进程运行多个应用

    • Node.js 应用监听不同端口(3001, 3002…)
    • 使用 PM2 管理进程:
      pm2 start app1.js --name "site1" --port 3001
      pm2 startup
      pm2 save

三、SSL 加密(HTTPS)

  1. 使用 Let’s Encrypt 免费证书

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

    自动配置 HTTPS 并设置自动续期。

  2. 强制 HTTPS 重定向
    Certbot 会自动添加重定向规则。


四、用户与权限隔离

  1. 为每个网站创建独立系统用户

    sudo adduser site1-user
    sudo chown -R site1-user:site1-user /var/www/site1

    避免一个网站被入侵影响其他网站。

  2. 限制用户访问目录
    使用 chmodchown 控制文件权限,禁止跨站读取。


五、数据库安全(如 MySQL/MariaDB)

  1. 为每个网站创建独立数据库和用户

    CREATE DATABASE site1_db;
    CREATE USER 'site1_user'@'localhost' IDENTIFIED BY '强密码';
    GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';
    FLUSH PRIVILEGES;
  2. 禁用远程数据库访问
    /etc/mysql/mysql.conf.d/mysqld.cnf 中:

    bind-address = 127.0.0.1

六、文件上传与代码安全

  1. 禁止在 Web 目录执行脚本
    在 Nginx 配置中添加:

    location ~* .(php|py|sh|js)$ {
        deny all;
    }
  2. 限制上传目录权限

    • 上传目录不要有执行权限。
    • 使用独立存储或对象存储(如 OSS/COS)存放用户上传文件。

七、定期备份与监控

  1. 自动备份网站和数据库
    使用脚本 + cron 备份到远程或本地:

    # 备份数据库
    mysqldump -u user -p password database > /backup/db_$(date +%F).sql
    # 压缩网站文件
    tar -czf /backup/site1_$(date +%F).tar.gz /var/www/site1

    结合云厂商快照功能更佳。

  2. 日志监控

    • 分析 Nginx 访问日志和错误日志。
    • 使用 fail2ban 防止暴力破解:
      sudo apt install fail2ban

八、可选:使用容器化(Docker)增强隔离

将每个网站封装在 Docker 容器中,实现更强的隔离:

# docker-compose.yml
version: '3'
services:
  site1:
    image: node:16
    ports:
      - "3001:3000"
    volumes:
      - ./site1:/app
    restart: unless-stopped

再通过 Nginx 反向X_X转发请求。

✅ 优点:环境隔离、易于部署、资源可控
⚠️ 注意:轻量服务器资源有限,避免过度使用容器导致性能下降。


九、安全扫描与加固

  1. 使用工具检测漏洞:

    • lynis audit system
    • rkhunter 检查后门
    • ClamAV 扫描恶意文件
  2. 定期审查 SSH 登录日志:

    sudo grep "Failed password" /var/log/auth.log

总结:关键安全措施清单

项目 措施
系统安全 更新系统、禁用 root、密钥登录、防火墙
多站点托管 Nginx 反向X_X + 不同端口
HTTPS Let’s Encrypt 自动配置
权限隔离 独立用户、文件权限控制
数据库 独立账号、本地绑定
代码安全 禁止执行上传文件
备份 定期备份网站与数据库
监控 日志分析、fail2ban、定期检查

通过以上措施,即使在资源有限的轻量应用服务器上,也能安全、稳定地托管多个网站。建议根据实际流量和安全需求逐步实施。

云服务器