默认的server的命中规则

66 阅读1分钟

结论

在端口一致的情况下,如果 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文件中配置,所以是无法访问的