结论
在端口一致的情况下,如果 server_name 匹配不上,nginx 会命中默认的 server 块
前提
域名指向同一个ip
示例
本机的hosts配置如下:
这三个域名都绑定到了同一个ip
文件地址:"C:\Windows\System32\drivers\etc\hosts"
配置:
192.168.2.116 dx.com
192.168.2.116 www.dzl.com
192.168.2.116 vip.xbb.cn
nginx的配置如下:
server {
listen 1100;
# server_name 用来配置 域名的,而不是ip
# 配置ip,需要在 listen中书写,如下
# listen 192.168.123:8088;
# server_name _;
server_name dx.com;
location / {
root dxHtml;
index index.html index.htm;
}
}
server {
# 通过 default_server来指定默认的server块,如果不指定,则默认的server块是同一端口下的第一个server块
listen 1100 default_server;
server_name www.dzl.com;
location / {
root html;
index index.html index.htm;
}
}
访问的url地址和真实资源路径对照表:
| url 地址 | 真实地址 | 引用标识 |
|---|---|---|
| dx.com:1100/ | dxHtml/index.html | ① |
| www.dzl.com:1100/ | html/index.html | ② |
| vip.xbb.cn:1100/ | html/index.html | ③ |
nginx中并未对 ③ 的地址进行匹配,但是依旧能访问到资源,是因为命中了默认的 server块。
如果访问 vip.xbb.ccccc:1100/ 这个地址,该地址并未在本地的hosts文件中配置,所以是无法访问的