在轻量应用服务器(如腾讯云轻量、阿里云轻量、Vultr、DigitalOcean Droplet 等)上配置多个网站共存,核心是通过 Web 服务器的虚拟主机(Virtual Host)机制 实现基于域名或端口的多站托管。以下是清晰、安全、生产可用的完整方案(以主流组合 Nginx + Ubuntu/Debian 为例,也附 Apache 和关键注意事项):
✅ 前提条件
- 已购轻量服务器(建议 ≥1GB 内存、20GB SSD)
- 已绑定并解析多个域名到服务器公网 IP(如
site1.com、site2.net→1.2.3.4) - 已安装基础环境(推荐:Ubuntu 22.04 LTS + Nginx + Certbot + PHP-FPM(如需 PHP))
🌐 方案一:Nginx 多域名虚拟主机(推荐 ✅)
✅ 高性能、低内存占用,最适合轻量服务器
步骤 1:创建网站目录结构
sudo mkdir -p /var/www/site1.com/html
sudo mkdir -p /var/www/site2.net/html
# 设置权限(用你的普通用户替换 `ubuntu`)
sudo chown -R $USER:$USER /var/www/site1.com/html
sudo chown -R $USER:$USER /var/www/site2.net/html
sudo chmod -R 755 /var/www
# 写测试页(可选)
echo "<h1>Welcome to site1.com</h1>" | sudo tee /var/www/site1.com/html/index.html
echo "<h1>Welcome to site2.net</h1>" | sudo tee /var/www/site2.net/html/index.html
步骤 2:为每个站点创建 Nginx Server Block(配置文件)
# 创建配置文件(注意:不带 .conf 后缀可能不被加载!)
sudo nano /etc/nginx/sites-available/site1.com
内容如下:
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
# 若需 PHP 支持(如 WordPress),取消下面注释并确保已装 php-fpm
# location ~ .php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据实际版本调整
# }
}
同理创建 /etc/nginx/sites-available/site2.net(仅改 server_name 和 root)。
步骤 3:启用站点(软链接到 sites-enabled)
sudo ln -sf /etc/nginx/sites-available/site1.com /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/site2.net /etc/nginx/sites-enabled/
# 可选:禁用默认站点(避免冲突)
sudo rm -f /etc/nginx/sites-enabled/default
步骤 4:语法检查 & 重启
sudo nginx -t # ✅ 应显示 "syntax is ok"
sudo systemctl reload nginx
✅ 此时访问 http://site1.com 和 http://site2.net 即可看到不同页面。
🔐 步骤 5:为所有站点添加 HTTPS(强烈推荐 ✅)
使用 Certbot(免费 Let’s Encrypt 证书):
# 安装 Certbot(Ubuntu)
sudo apt update && sudo apt install -y certbot python3-certbot-nginx
# 一键为两个域名申请证书(自动修改 Nginx 配置)
sudo certbot --nginx -d site1.com -d www.site1.com -d site2.net -d www.site2.net
# Certbot 会自动重载 Nginx 并配置 80→443 重定向
✅ 自动生效 HTTPS,且证书 90 天自动续期(Certbot 已配置 systemd timer)。
📦 方案二:Apache(备选,稍重)
若习惯 Apache:
sudo a2enmod rewrite ssl
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site1.com.conf
# 编辑配置:修改 ServerName、DocumentRoot、<Directory>路径
sudo a2ensite site1.com.conf
sudo systemctl reload apache2
⚠️ 注意:Apache 默认占用更多内存(~50MB/进程),轻量服务器建议优先选 Nginx。
🧩 进阶技巧(提升实用性)
| 场景 | 方法 |
|---|---|
同一域名不同路径(如 example.com/blog, example.com/api) |
在主配置中用 location /blog { alias /var/www/blog; } |
| 静态站 + 动态站混合 | Nginx 静态文件直接服务;PHP/Python 请求反向X_X给后端(如 proxy_pass http://127.0.0.1:8000;) |
| Node.js 应用(如 Vue SSR、Express) | 用 proxy_pass http://localhost:3000; 指向 Node 进程,并用 PM2 守护 |
| 数据库隔离 | 每个网站用独立 MySQL 用户 + 独立数据库(CREATE DATABASE site1_db; CREATE USER 'site1'@'localhost' IDENTIFIED BY 'pwd'; GRANT ALL ON site1_db.* TO 'site1'@'localhost';) |
⚠️ 关键注意事项(避坑指南)
- ❌ 不要直接编辑
/etc/nginx/nginx.conf主配置 —— 用sites-available+sites-enabled管理更安全; - ❌ 域名未正确 DNS 解析(A 记录指向服务器 IP)会导致 404 或连接失败 → 用
ping site1.com和nslookup site1.com验证; - ❌ 轻量服务器防火墙(如腾讯云控制台安全组)必须放行 80 和 443 端口(不只是 SSH 的 22);
- ✅ 使用
sudo nginx -t每次改配置后必检,避免 reload 失败导致服务中断; - ✅ 日志排查:
sudo tail -f /var/log/nginx/error.log(错误根源)、access.log(请求记录); - ✅ 定期备份:
sudo tar -czf /backup/nginx-config-$(date +%F).tar.gz /etc/nginx/sites-available/
📦 一键脚本(可选,简化部署)
可编写简单 Bash 脚本自动化建站(示例片段):
#!/bin/bash
DOMAIN=$1
sudo mkdir -p "/var/www/$DOMAIN/html"
echo "<h1>$DOMAIN</h1>" | sudo tee "/var/www/$DOMAIN/html/index.html"
# ... 自动生成 server block ...
sudo nginx -t && sudo systemctl reload nginx
运行:sudo ./add-site.sh myblog.com
需要我为你:
- ✅ 提供完整的 WordPress 多站部署模板(含数据库、PHP、缓存优化)?
- ✅ 生成 Docker Compose 版多站方案(隔离性更强)?
- ✅ 输出 腾讯云/阿里云轻量控制台安全组规则截图指引?
- ✅ 写一个 自动部署脚本(含 HTTPS)?
欢迎告诉我你的具体需求(比如用什么程序?多少个站?是否需要数据库?),我可以为你定制化输出 👇
云小栈