虚拟主机配置
虚拟主机允许单台 Nginx 服务器托管多个网站,下面介绍三种配置方式。
基于域名的虚拟主机
最常见的虚拟主机类型,通过不同域名访问不同网站:
nginx
server {
listen 80;
server_name www.site1.com;
root /var/www/site1;
location / {
index index.html;
}
}
server {
listen 80;
server_name www.site2.com;
root /var/www/site2;
location / {
index index.html;
}
}
server_name 匹配规则
| 规则类型 | 示例 | 说明 |
|---|---|---|
| 精确匹配 | server_name www.example.com; | 完全匹配域名 |
| 通配符前缀 | server_name *.example.com; | 匹配子域名 |
| 通配符后缀 | server_name www.example.*; | 匹配顶级域名 |
| 正则匹配 | server_name ~^www\d+\.example\.com$; | 使用正则表达式 |
基于端口的虚拟主机
通过不同端口区分不同网站:
nginx
server {
listen 8080;
server_name localhost;
root /var/www/app1;
}
server {
listen 8090;
server_name localhost;
root /var/www/app2;
}
基于 IP 的虚拟主机
通过不同 IP 地址区分不同网站,需服务器配置多 IP:
nginx
server {
listen 192.168.1.10:80;
server_name localhost;
root /var/www/site_a;
}
server {
listen 192.168.1.11:80;
server_name localhost;
root /var/www/site_b;
}
默认虚拟主机
当请求不匹配任何 server_name 时,由默认虚拟主机处理:
nginx
server {
listen 80 default_server;
server_name _;
return 444;
}
注意事项
default_server标记该 server 为默认虚拟主机server_name _是约定俗成的写法,表示捕获所有未匹配的域名return 444是 Nginx 特有状态码,直接关闭连接不返回响应- 同一端口多个 server 时,Nginx 按 server_name 匹配优先级选择
匹配优先级
- 精确匹配(最高优先级)
- 通配符前缀匹配(
*.example.com) - 通配符后缀匹配(
www.example.*) - 正则匹配
- default_server(最低优先级)
组合配置示例
同时基于域名和端口配置虚拟主机:
nginx
# site1.com:80
server {
listen 80;
server_name www.site1.com;
root /var/www/site1;
}
# site2.com:80
server {
listen 80;
server_name www.site2.com;
root /var/www/site2;
}
# site3.com:8080
server {
listen 8080;
server_name www.site3.com;
root /var/www/site3;
}
要点总结
- Nginx 支持基于域名、端口、IP 三种虚拟主机方式
- 基于域名的虚拟主机最常用,通过 server_name 指令配置
- server_name 支持精确匹配、通配符、正则表达式
- default_server 用于处理未匹配到任何域名的请求
- 匹配优先级:精确 > 通配符前缀 > 通配符后缀 > 正则 > default_server
📝 发现内容有误?点击此处直接编辑