在轻量级云服务器上部署多个不同网站,核心思路是通过 Nginx/Apache 反向X_X + 域名绑定 + 端口隔离实现多站点共存。以下是具体方案(以 Linux + Nginx 为例):
✅ 推荐架构
公网 IP:80/443 → Nginx(监听 80/443)
├─ site1.example.com → /var/www/site1(Node.js/Python/静态等)
├─ site2.example.org → /var/www/site2(PHP/Java 等)
└─ api.site3.net → /var/www/site3(Go/其他语言)
📦 步骤详解
1️⃣ 准备环境
# Ubuntu/Debian 示例
sudo apt update && sudo apt install nginx curl git -y
# 若需 PHP/MySQL(按需安装)
sudo apt install php-fpm mysql-server -y
# 若运行 Node.js/Python 应用,确保已安装对应运行时
# npm/nodejs, python3-pip 等
2️⃣ 创建网站目录与项目
sudo mkdir -p /var/www/site1 /var/www/site2 /var/www/site3
sudo chown -R $USER:$USER /var/www/site*
将各网站代码分别放入对应目录(如 site1 放 React 构建产物,site2 放 WordPress,site3 放 Flask 应用)。
3️⃣ 配置 Nginx 虚拟主机
编辑 /etc/nginx/sites-available/default(或新建独立配置文件):
# site1.example.com — 静态站或 Node.js 反向X_X
server {
listen 80;
server_name site1.example.com www.site1.example.com;
root /var/www/site1;
index index.html;
# 若是 Node.js 后端(如 Express),需反向X_X到本地端口
# location /api {
# proxy_pass http://localhost:3000;
# proxy_set_header Host $host;
# }
}
# site2.example.org — PHP 应用(如 WordPress)
server {
listen 80;
server_name site2.example.org;
root /var/www/site2/public_html;
index index.php;
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
# site3.net — Go/其他语言(假设运行在 8080)
server {
listen 80;
server_name site3.net;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
💡 提示:
- 每个
server块必须指定唯一的server_name(域名);- 非 Web 服务(如 API、后台)可通过
proxy_pass转发到本地进程(如node app.js、python app.py、./go-app);- 使用
systemctl restart nginx重启生效。
4️⃣ 启用配置并测试
sudo ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
sudo nginx -t # 检查语法错误
sudo systemctl reload nginx
5️⃣ 域名解析 & HTTPS(可选但推荐)
- 在 DNS 服务商处为各域名添加 A 记录 指向服务器公网 IP;
- 使用 Let’s Encrypt 免费证书(推荐 Certbot):
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d site1.example.com -d site2.example.org -d site3.netCertbot 会自动更新 Nginx 配置并设置 HTTP→HTTPS 重定向。
6️⃣ 守护进程管理(关键!)
轻量服务器资源有限,务必用 PM2/Supervisor 等保活应用:
- Node.js:
npm install -g pm2→pm2 start app.js --name site1 - Python:
pip install supervisor→ 配置/etc/supervisor/conf.d/site3.conf - 通用脚本:用
systemd创建.service文件(更稳定)
示例 site3.service:
[Unit]
Description=Site3 Go App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/site3
ExecStart=/usr/local/bin/go-app
Restart=always
[Install]
WantedBy=multi-user.target
→ sudo systemctl enable site3 && sudo systemctl start site3
⚠️ 注意事项(轻量机优化)
| 问题 | 解决方案 |
|---|---|
| 内存不足(<1GB) | 关闭不必要的服务;用 swap 分区;限制 PHP-FPM 进程数 (pm.max_children = 5) |
| 带宽受限 | 启用 Gzip/Brotli 压缩;静态资源加 CDN(如 Cloudflare);图片转 WebP |
| 单点故障 | 定期备份数据库+代码(rsync 到远程存储);监控 CPU/内存(htop, netdata) |
| 安全加固 | 防火墙:ufw allow 'Nginx Full', ufw deny 22 后改用 SSH 密钥登录 |
🔁 替代方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Nginx + 多域名 | 轻量、灵活、原生支持 | 需手动配反向X_X | ✅ 推荐首选 |
| Docker Compose | 环境隔离、易迁移 | 增加资源开销(~200MB RAM) | 微服务/复杂依赖 |
| cPanel/Plesk | 图形化管理 | 占用高(≥512MB RAM)、付费 | 新手但不适合超小机 |
子目录方式(example.com/site1) |
无需多域名 | SEO 不利、URL 不清晰 | ❌ 不推荐用于正式站点 |
需要我为你提供:
- 某个具体技术栈的完整部署模板(如 Next.js + WordPress + FastAPI)?
- Docker 化版本(含
docker-compose.yml)? - 自动化部署脚本(Ansible/GitHub Actions)?
欢迎告诉我你的具体需求 😊
云小栈