一、什么是虚拟主机

原笔记对虚拟主机的定义很直接:

  • 虚拟主机本质上就相当于一个网站
  • 在 Nginx 中通常通过 server {} 区域实现

当一台服务器上要承载多个网站时,虚拟主机就是最基础的组织方式。

二、虚拟主机常见的三种类型

原笔记把虚拟主机分成三类:

类型 说明 应用场景
基于域名 不同域名访问不同站点 生产环境最常见
基于端口 不同端口访问不同站点 特殊入口、隔离场景
基于 IP 不同 IP 访问不同站点 限制仅指定 IP 可访问

这三种方式本质上都是让 Nginx 在请求到来时,根据不同条件选中不同的 server {}

三、基于域名的虚拟主机怎么配置

原笔记用 bird.oldboylinux.cn 做了演示,配置如下:

server {
    listen       80;
    server_name  bird.oldboylinux.cn;
    root   /app/code/bird;
    location / {
        index  index.html;
    }
}

完整步骤包括:

1、写入子配置文件
2、执行 nginx -t 检查语法
3、systemctl reload nginx 重载配置

然后原笔记又演示了三个典型结果:

3.1 站点目录不存在时返回 404

curl -H Host:bird.oldboylinux.cn http://192.168.1.20

如果 /app/code/bird/ 还没创建,请求会得到 404 Not Found

3.2 目录存在但首页文件不存在时返回 403

mkdir -p /app/code/bird/
curl -H Host:bird.oldboylinux.cn http://192.168.1.20

这时目录虽然有了,但没有首页文件,因此会返回 403 Forbidden

3.3 创建首页文件后可以正常访问

echo bird.oldboylinux.cn >/app/code/bird/index.html
curl -H Host:bird.oldboylinux.cn http://192.168.1.20

返回:

bird.oldboylinux.cn

原笔记还给了一个本地调试技巧:

curl -H Host:bird.oldboylinux.cn http://192.168.1.20

这里的 -H 可以手动改写请求头里的 Host,适合在还没配 DNS 或本地 hosts 时测试域名站点。

四、基于端口的虚拟主机怎么配置

原笔记的第二个案例是 live.oldboylinux.cn,监听 81 端口:

server {
    listen       81;
    server_name  live.oldboylinux.cn;
    root   /app/code/live;

    location / {
        index  index.html;
    }
}

配套步骤包括:

mkdir -p /app/code/live/
echo live.oldboylinux.cn >/app/code/live/index.html
nginx -t
systemctl reload nginx
curl -H Host:live.oldboylinux.cn http://192.168.1.20:81/index.html

这个案例说明:

  • 域名可以相同风格管理
  • 但请求必须进入指定端口
  • 端口不同,也能被当作不同站点入口

五、基于 IP 的虚拟主机怎么配置

原笔记第三个案例是 mi.oldboylinux.cn,要求只能通过 172.16.1.20:8888 访问:

server {
    listen   172.16.1.20:8888;
    server_name  mi.oldboylinux.cn;
    root   /app/code/mi;

    location / {
        index  index.html;
    }
}

然后准备目录和首页:

mkdir -p /app/code/mi/
echo mi.oldboylinux.cn >/app/code/mi/index.html
nginx -t
systemctl reload nginx
curl -H Host:mi.oldboylinux.cn http://172.16.1.20:8888/index.html

这个场景的核心是:

  • 不只是端口受限
  • 连监听的 IP 也被限定了
  • 更适合做内网入口或受控访问

六、三种方式该怎么理解和选择

结合原笔记的分类,可以这样理解:

  • 域名型虚拟主机最适合正式网站,一台服务器承载多个域名站点时最常用
  • 端口型虚拟主机适合测试环境、特殊服务入口或简单隔离场景
  • IP 型虚拟主机适合受限访问、内网入口或 VPN 场景

虽然写法不同,但底层逻辑是一致的:
Nginx 会根据请求进入的 IP、端口和域名,把它分配给正确的 server {}

七、小结

虚拟主机是 Nginx 多站点管理的核心能力。
只要把三件事想清楚:

  • 请求从哪个 IP 进入
  • 请求打到哪个端口
  • 请求里携带哪个域名

就能更自然地理解为什么同一台服务器可以同时承载多个不同站点。