Nginx 一台服务器跑多网站:零基础虚拟主机配置教程

一台服务器想同时跑多个网站,核心做法是给每个域名配置一个独立的 server 块,并让 Nginx 根据请求里的域名(Host 头)分发到不同目录。
前提是每个域名都已解析到这台服务器的公网 IP,服务器 80 和 443 端口已放行。
下面按零基础也能照做的顺序展开。

先确认域名解析和端口这两件事

在写配置之前,先验证请求能不能到达这台服务器,否则配置对了也看不到结果。

  • 在本地终端执行 ping 你的域名 或 nslookup 你的域名,返回的应该是服务器公网 IP。域名解析生效通常需要几分钟到几十分钟,刚加完记录不要急着排查 Nginx。
  • 确认服务器防火墙和安全组放行了 80(HTTP)和 443(HTTPS)。云服务器控制台的“安全组”和系统内防火墙是两套,缺一个都会表现为“连接超时”。
  • 确认 Nginx 已安装并运行:nginx -v 看版本,systemctl status nginx 看状态。

目录规划建议提前想好,后面改路径会牵动配置。
常见做法是每个站点一个目录,例如 /www/site-a、/www/site-b,日志也分开存放,方便单独排查。

为每个站点写一个 server 块

Nginx 按 include 加载配置,主流发行版通常会把 /etc/nginx/conf.d/*.conf 或 /etc/nginx/sites-enabled/* 引入主配置。
多网站场景下,一个站点一个 .conf 文件最清晰,出问题也容易定位。

以 site-a.com 为例,新建 /etc/nginx/conf.d/site-a.conf:

server {
    listen 80;
    server_name site-a.com www.site-a.com;

    root /www/site-a;
    index index.html index.php;

    access_log /var/log/nginx/site-a.access.log;
    error_log  /var/log/nginx/site-a.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

再为第二个域名建一个结构相同、
只改 server_name、root 和日志文件名的文件。关键点在于 server_name 要和用户实际访问的域名完全一致,www 和不带 www 要按需分别写进去,
或者用重定向统一。

改完配置先做语法检查,再平滑加载,不要直接重启:

nginx -t
systemctl reload nginx

nginx -t 报 syntax is ok 且 test is successful 才算通过。
如果报错,会直接指出文件名和行号,按提示改即可。

权限和默认站点这两个坑最容易翻车

配置看起来没问题但页面报 403,多数是权限问题。
Nginx 进程通常以 nginx 或 www-data 用户运行,站点目录需要让这个用户有读取和执行权限。
目录权限一般给 755,文件给 644,不要为了省事直接 chmod 777。

chown -R nginx:nginx /www/site-a
chmod -R 755 /www/site-a

具体用户名用 ps aux | grep nginx 确认,不同系统可能不一样。

另一个常见现象是“访问任意域名都跳到同一个网站”。
这通常是默认站点在起作用:当请求的域名没有匹配到任何 server_name 时,Nginx 会用第一个或标记了 default_server 的 server 块处理。
给默认站点单独建一个文件,只返回 444 或一个占位页,可以避免串站:

server {
    listen 80 default_server;
    server_name _;
    return 444;
}

上 HTTPS 时别让证书只配了一个域名

如果站点要启用 HTTPS,每个域名需要单独配置 listen 443 ssl,并指向对应证书。
把 A 站点的证书用到 B 站点上,浏览器会报证书域名不匹配。
多站点共用一个证书文件时,要确认证书的 SAN(备用名称)字段确实覆盖了所有域名。

配置完用 nginx -t 验证,再用 curl -I https://站点域名 看返回头。
也可以用 openssl s_client -connect 域名:443 -servername 域名 检查实际返回的证书。

怎么验证多网站确实各走各的

最直接的验证方式是在每个站点目录放一个内容不同的 index.html,然后分别访问。
如果都显示正确,说明分发正常。

还可以用 curl 指定 Host 来测试,绕开本地 DNS 缓存:

curl -I -H "Host: site-a.com" http://服务器IP

返回的 HTTP/1.1 200 和页面内容能对上,就说明该域名的 server 块生效了。
如果返回 404,检查 root 路径和文件是否存在;
返回 403,回到权限部分检查。

常见疑问

一个 server 块里能写多个域名吗?
可以。server_name 后面用空格分隔多个域名,它们会共用同一个 root 和配置。适合主域名和 www 指向同一套程序的情况,内容不同的站点还是分开写更清楚。

改了配置为什么没生效?
先确认执行了 systemctl reload nginx。如果还不行,检查配置文件是否真的在 include 范围内,有些系统默认只加载 conf.d 下的 .conf 文件,文件名后缀不对不会被读取。

两个域名想跑在同一台服务器的不同端口上可以吗?
可以,把 listen 改成不同端口即可,但用户访问时需要带端口号。域名直接对应默认的 80/443 体验更好,端口方式更适合内部测试或临时服务。

多站点配置的本质是让域名、目录、证书三者一一对应。
先把解析和端口确认清楚,再一个站点一个配置文件地加,配合 nginx -t 和 curl 验证,绝大多数问题都能快速定位。

分享到:
上一篇
Nginx伪静态规则配置:从rewrite到try_files实操
下一篇
Nginx安全加固教程:从默认配置到可验证的防护清单
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意