在一台服务器上托管多个站点
如何在一个 VPS 上托管十几个站点:目录结构、独立的配置与用户、共享证书,以及按套餐估算负载。
更新于 2026年8月23日
一个公网 IPv4 地址可以为任意数量的域名提供服务:Web 服务器通过 Host 请求头来路由请求。限制不在于地址数量,而在于您所选套餐的内存和磁盘。
目录结构
保持使用同一个模板,否则半年后您就分不清哪个站点属于谁了:
/var/www/example.ru/public
/var/www/example.ru/logs
/var/www/shop.ru/public
/var/www/shop.ru/logs
为每个站点保留独立的配置文件:/etc/nginx/sites-available/<domain>,通过 sites-enabled 中的符号链接启用。这样禁用某个站点时,只需删除一个符号链接并重新加载,而不必在共享文件中翻找对应的配置片段。
配置
server {
listen 80;
server_name example.ru www.example.ru;
root /var/www/example.ru/public;
index index.html index.php;
access_log /var/www/example.ru/logs/access.log;
}
同时为未知域名设置一个“兜底站点”,否则任何指向您地址的第三方域名都会打开按字母顺序排在最前面的那个配置:
server {
listen 80 default_server;
server_name _;
return 444;
}
权限隔离
如果这些站点属于不同的客户或不同的项目,不要给它们使用同一个用户:否则一个脚本出现漏洞,就意味着所有站点都会被入侵。
useradd -r -d /var/www/example.ru -s /usr/sbin/nologin site-example
chown -R site-example:www-data /var/www/example.ru
chmod 750 /var/www/example.ru
对于 PHP,为每个站点创建独立的 FPM 池,各自拥有自己的 user 和 listen——参见 PHP-FPM。数据库也要分开:用户与授权。
证书
一次 certbot 运行即可同时覆盖多个域名:
certbot --nginx -d example.ru -d www.example.ru -d shop.ru -d www.shop.ru
续期是共用的,只需一个定时器。详情参见 Let's Encrypt。
能放多少个站点
要按内存来估算,而不是按域名数量。静态站点几乎不占资源;带数据库的 CMS 站点则要占用数百兆字节。
| 套餐 | 内存 | 参考 |
|---|---|---|
| VDS-1(2 GB) | 2 GB | 1–2 个 CMS 站点或十几个静态站点 |
| VDS-2(4 GB) | 4 GB | 3–5 个 CMS 站点 |
| VDS-3(8 GB) | 8 GB | 8–12 个 CMS 站点 |
磁盘空间同样是有限的:VDS-1 为 40 GB,VDS-6 为 250 GB。您只能升级套餐,并补缴已付费周期剩余天数的差价。
常见错误
| 现象 | 原因 |
|---|---|
| 所有域名都显示同一个站点 | server_name 未匹配,于是由第一个配置块处理了请求 |
| 所有站点的日志都写进同一个文件 | 站点配置块中未设置 access_log |
| 一个站点拖垮了全部 | 共用的 PHP-FPM 池没有设置任何限制 |
| 磁盘空间耗尽 | 日志和备份放在同一块磁盘上——请配置 logrotate |
在添加新站点之前,请先查看面板
/hosting/vds/m/<id>的“概览”中过去一周的内存图表。如果峰值已经顶到上限,那么新站点将成为崩溃的原因,而不是结果。