在轻量应用服务器(如阿里云轻量应用服务器、腾讯云轻量服务器等)上安全地托管多个网站,需要从系统安全、网络隔离、资源管理、数据保护和监控维护等多个方面进行配置。以下是详细的安全实践指南:
一、基础系统安全设置
-
更新系统与软件
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian sudo yum update -y # CentOS/RHEL定期更新系统内核和软件包,防止已知漏洞被利用。
-
创建非 root 用户并禁用 root 登录
adduser deploy usermod -aG sudo deploy编辑
/etc/ssh/sshd_config:PermitRootLogin no PasswordAuthentication no # 推荐使用密钥登录然后重启 SSH:
sudo systemctl restart sshd -
配置防火墙(UFW 或 firewalld)
sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo uuf enable只开放必要的端口(80, 443, 22),关闭其他端口。
-
启用自动安全更新
安装unattended-upgrades:sudo apt install unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades
二、使用反向X_X实现多站点托管(推荐 Nginx)
-
安装 Nginx
sudo apt install nginx -
为每个网站创建独立的配置文件
示例:/etc/nginx/sites-available/site1.comserver { 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 -
使用不同端口或进程运行多个应用
- Node.js 应用监听不同端口(3001, 3002…)
- 使用 PM2 管理进程:
pm2 start app1.js --name "site1" --port 3001 pm2 startup pm2 save
三、SSL 加密(HTTPS)
-
使用 Let’s Encrypt 免费证书
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d site1.com -d www.site1.com自动配置 HTTPS 并设置自动续期。
-
强制 HTTPS 重定向
Certbot 会自动添加重定向规则。
四、用户与权限隔离
-
为每个网站创建独立系统用户
sudo adduser site1-user sudo chown -R site1-user:site1-user /var/www/site1避免一个网站被入侵影响其他网站。
-
限制用户访问目录
使用chmod和chown控制文件权限,禁止跨站读取。
五、数据库安全(如 MySQL/MariaDB)
-
为每个网站创建独立数据库和用户
CREATE DATABASE site1_db; CREATE USER 'site1_user'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost'; FLUSH PRIVILEGES; -
禁用远程数据库访问
在/etc/mysql/mysql.conf.d/mysqld.cnf中:bind-address = 127.0.0.1
六、文件上传与代码安全
-
禁止在 Web 目录执行脚本
在 Nginx 配置中添加:location ~* .(php|py|sh|js)$ { deny all; } -
限制上传目录权限
- 上传目录不要有执行权限。
- 使用独立存储或对象存储(如 OSS/COS)存放用户上传文件。
七、定期备份与监控
-
自动备份网站和数据库
使用脚本 + cron 备份到远程或本地:# 备份数据库 mysqldump -u user -p password database > /backup/db_$(date +%F).sql # 压缩网站文件 tar -czf /backup/site1_$(date +%F).tar.gz /var/www/site1结合云厂商快照功能更佳。
-
日志监控
- 分析 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转发请求。
✅ 优点:环境隔离、易于部署、资源可控
⚠️ 注意:轻量服务器资源有限,避免过度使用容器导致性能下降。
九、安全扫描与加固
-
使用工具检测漏洞:
lynis audit systemrkhunter检查后门ClamAV扫描恶意文件
-
定期审查 SSH 登录日志:
sudo grep "Failed password" /var/log/auth.log
总结:关键安全措施清单
| 项目 | 措施 |
|---|---|
| 系统安全 | 更新系统、禁用 root、密钥登录、防火墙 |
| 多站点托管 | Nginx 反向X_X + 不同端口 |
| HTTPS | Let’s Encrypt 自动配置 |
| 权限隔离 | 独立用户、文件权限控制 |
| 数据库 | 独立账号、本地绑定 |
| 代码安全 | 禁止执行上传文件 |
| 备份 | 定期备份网站与数据库 |
| 监控 | 日志分析、fail2ban、定期检查 |
通过以上措施,即使在资源有限的轻量应用服务器上,也能安全、稳定地托管多个网站。建议根据实际流量和安全需求逐步实施。
云小栈