在轻量级云服务器(如阿里云ECS、腾讯云CVM、华为云Cloud Server等)上部署多个不同网站,核心思路是“一个IP,多域名,通过Web服务器区分”。这主要依赖于 Web 服务器(Nginx/Apache)的虚拟主机(Virtual Host)或Server Block功能。
以下是基于主流 Linux 发行版(以 CentOS/Ubuntu 为例)和 Nginx 的详细实操指南。Nginx 因高性能和低资源占用,是轻量级服务器的首选。
一、 前期准备
-
域名解析:
- 确保你拥有的多个域名(如
a.com,b.com)都已正确解析到该轻量级服务器的公网 IP。 - 每个域名需在工信部完成 ICP 备案(国内云厂商强制要求)。
- 确保你拥有的多个域名(如
-
安装环境:
- 操作系统:CentOS 7+/8+ 或 Ubuntu 20.04+/22.04+
- Web 服务器:Nginx
- 后端语言:根据网站需求安装 PHP、Node.js、Python 等。
- 数据库:MySQL/MariaDB/PostgreSQL(若需要动态内容)。
-
目录结构规划:
/var/www/ ├── a.com/ # a.com 的网站文件 │ └── public_html/ ├── b.com/ # b.com 的网站文件 │ └── public_html/ └── c.net/ # c.net 的网站文件 └── public_html/
二、 核心配置:Nginx 虚拟主机
1. 创建网站目录
为每个网站创建独立的目录和文件:
sudo mkdir -p /var/www/a.com/public_html
sudo mkdir -p /var/www/b.com/public_html
# 创建测试页
echo "<h1>Welcome to A.com</h1>" | sudo tee /var/www/a.com/public_html/index.html
echo "<h1>Welcome to B.com</h1>" | sudo tee /var/www/b.com/public_html/index.html
# 设置权限(重要!避免权限问题)
sudo chown -R www-data:www-data /var/www/ # Ubuntu 使用 www-data;CentOS 使用 nginx 或 apache
sudo chmod -R 755 /var/www/
2. 创建 Nginx 配置文件
在 /etc/nginx/conf.d/ 目录下为每个网站创建独立的配置文件。
文件:/etc/nginx/conf.d/a.com.conf
server {
listen 80;
server_name a.com www.a.com;
root /var/www/a.com/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 可选:重定向 HTTP 到 HTTPS(需先申请 SSL 证书)
# return 301 https://$server_name$request_uri;
}
文件:/etc/nginx/conf.d/b.com.conf
server {
listen 80;
server_name b.com www.b.com;
root /var/www/b.com/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
关键点:Nginx 会根据
server_name匹配请求头中的 Host 字段,从而将流量分发到对应的root目录。这是实现多站点隔离的核心。
3. 测试并重启 Nginx
# 检查配置语法是否正确
sudo nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则重启服务
sudo systemctl restart nginx
此时,访问 http://a.com 和 http://b.com 应分别显示不同的内容。
三、 进阶:启用 HTTPS(SSL 证书)
现代网站必须支持 HTTPS。推荐使用 Let’s Encrypt 免费证书,配合 certbot 工具自动管理。
1. 安装 Certbot
- Ubuntu:
sudo apt install certbot python3-certbot-nginx - CentOS:
sudo yum install epel-release && sudo yum install certbot python3-certbot-nginx
2. 为每个域名申请证书
# 为 a.com 申请并自动配置 Nginx
sudo certbot --nginx -d a.com -d www.a.com
# 为 b.com 申请并自动配置 Nginx
sudo certbot --nginx -d b.com -d www.b.com
注意:Certbot 会自动修改你的 Nginx 配置文件,添加 SSL 相关指令和重定向规则。请勿手动编辑这些由 Certbot 生成的部分,否则可能导致证书更新失败。
3. 自动续期
Certbot 通常会自动设置 cron job 进行续期。可手动测试:
sudo certbot renew --dry-run
四、 不同技术栈网站的混合部署
如果你的多个网站使用不同后端技术(如一个 WordPress PHP 站,一个 Node.js API 站),需额外配置反向X_X。
示例:Node.js 应用运行在端口 3000
假设 api.c.com 是一个 Node.js 应用,监听 localhost:3000。
Nginx 配置片段:
server {
listen 80;
server_name api.c.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
这样,用户访问 api.c.com 时,Nginx 会将请求转发给本地的 Node.js 进程,而对外仍表现为标准的 HTTP 服务。
五、 安全与优化建议(轻量级服务器特供)
-
防火墙配置:
- 仅开放必要端口:
80(HTTP),443(HTTPS)。 - 如果使用 SSH,建议更改默认端口或使用密钥登录。
- 使用云厂商控制台的安全组或系统内
firewalld/ufw限制。
- 仅开放必要端口:
-
资源监控:
- 轻量级服务器内存/CPU 有限,避免单个网站代码存在内存泄漏。
- 使用
htop或top监控进程,必要时配置 Swap 分区防止 OOM(Out of Memory)。
-
日志分离:
- 每个虚拟主机应有独立的 access.log 和 error.log,便于排查问题:
access_log /var/log/nginx/a.com.access.log; error_log /var/log/nginx/a.com.error.log;
- 每个虚拟主机应有独立的 access.log 和 error.log,便于排查问题:
-
备份策略:
- 定期备份网站文件和数据库。
- 利用云厂商提供的“快照”功能,对整块磁盘创建快照,成本低且恢复快。
-
禁止直接 IP 访问:
- 为防止恶意域名绑定到你的 IP,可在 Nginx 主配置中添加一个默认 server block,拒绝所有未匹配的请求:
server { listen 80 default_server; server_name _; return 444; # 不返回任何响应,直接关闭连接 }
- 为防止恶意域名绑定到你的 IP,可在 Nginx 主配置中添加一个默认 server block,拒绝所有未匹配的请求:
六、 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 访问域名显示默认页 | Nginx 配置未生效或优先级错误 | 检查 nginx -t,确认配置文件语法;清除浏览器缓存;检查 DNS 是否完全生效 |
| 403 Forbidden | 文件权限不足 | 确保 root 目录及文件对 Nginx 运行用户(www-data/nginx)可读 |
| 502 Bad Gateway | 后端服务未启动或端口错误 | 检查 PHP-FPM、Node.js 等服务是否运行;确认 proxy_pass 地址正确 |
| HTTPS 报错 | 证书过期或配置错误 | 运行 certbot renew;检查 Nginx 中 SSL 证书路径是否正确 |
总结
在轻量级服务器上部署多站点,本质是 Nginx 的多 Server Block 配置 + 域名解析 + 独立目录管理。只要遵循“一域一配置、一域一目录”的原则,即可高效、安全地托管多个网站。对于初学者,建议使用宝塔面板(Baota Panel)等可视化工具简化操作,但理解底层原理有助于故障排查和资源优化。
CLOUD云枢