首页 / 新闻资讯 / 技术教程

一台机器跑多个网站:Nginx 虚拟主机配置

2026-10-13分类:技术教程管理员

## 适用场景

一台配置宽裕的服务器放几个中小网站,是控制成本的常见做法:企业官网、活动页、内部系统,每个独立域名独立目录,互不干扰。Nginx 的虚拟主机按请求的域名分流:每个站点一个 server 块,各自拥有根目录、日志与证书,监听同一个 80 与 443 端口。顺云云服务器配置升一档的成本,远低于多开几台实例,中小站点合租一台完全合理。外加证书与日志的按站隔离,管理边界清楚,出问题互不甩锅。

## 配置步骤

每个站点一个配置文件放 /etc/nginx/conf.d/ 下,结构相同:

nginx
server {
    listen 80;
    server_name site-a.com www.site-a.com;
    root /var/www/site-a;
    access_log /var/log/nginx/site-a.access.log;
    error_log  /var/log/nginx/site-a.error.log;
}

site-b 再复制一份改域名与目录即可。server_name 的匹配有优先级:精确匹配最优先,其次前导通配、后缀通配,正则最后,全都不中时落到默认 server。证书各自配置,443 端口同样按 server_name 分流。改完 nginx -t 校验,reload 生效。

## 验证方法

本机验证不改 DNS 的技巧是 curl 加 Host 头模拟域名:

bash
curl -H "Host: site-a.com" 127.0.0.1

返回 site-a 的页面即分流正确,两个域名各验一次。再看两份日志文件分别有记录增长,边界就清楚了。上线后从外部分别访问两个域名确认证书与页面正确,控制台防火墙规则只需放行一次 80 与 443。别忘了两个站点的证书自动续期任务分别配好,多站环境最常见的翻车就是某张证书忘了续。

## 注意事项

合租的前提是资源有余量:每个站点的 PHP 进程池、数据库连接各自吃内存,峰值叠加才是真实水位,评估时按峰值算不按均值算。故障隔离也要想清楚:一个站点被打了大流量,整台机器的带宽都被吃,合租站会受连累,对可用性要求高的站点要评估是否值得分开。安全上目录权限按站点隔离,PHP 的 open_basedir 限制各自根目录,避免一个站点失守殃及邻居。站点数量继续涨或负载失衡,再按流量画像拆机,虚拟主机是阶段方案不是终点。数据库层同样可以按站分库分账号,一个站的慢查询不拖垮邻居的表。

技术教程