一、什么是虚拟主机¶
原笔记对虚拟主机的定义很直接:
- 虚拟主机本质上就相当于一个网站
- 在 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 进入
- 请求打到哪个端口
- 请求里携带哪个域名
就能更自然地理解为什么同一台服务器可以同时承载多个不同站点。