Nginx配置 - 虚拟主机 server_name 优先级

测试环境

  • Nginx 1.10.3 (nginx version: nginx/1.10.3 (Ubuntu))
  • Ubuntu 16.04.4 LTS x64 (ip:192.168.241.132)
  • Chrome (Win10)
  • Win10 Host
# host文件内容
192.168.241.132 www.ExactName.com
192.168.241.132 www.Wildcard.com
192.168.241.132 www.RegEx.com
# Nginx 测试html文件目录
/var/www/
├── test-1
│   ├── ExactName.html
│   ├── ExactNameOther.html
│   ├── ExactName-RE.html
│   └── ExactName-WildCard.html
├── test-2
│   ├── LongestWildcard.html
│   ├── ShorterWildcard.html
│   ├── Wildcard-End.html
│   └── Wildcard-Reg.html
├── test-3
│   ├── LongestWildcard-End.html
│   ├── ShorterWildcard-End.html
│   └── Wildcard-Reg.html
└── test-4
    ├── RegEx-exacted.html
    └── RegEx.html

匹配优先级

  1. 精确匹配名称
  2. 以星号开头的最长通配符
  3. 以星号结尾的最长通配符
  4. 第一个匹配的正则表达式(按配置文件中出现的顺序)

实例

1.精确名称

优先级最高,无论先后位置

文件目录

配置文件内容

# 不包含正则表达式的不匹配的名称网址
server {
	listen      80;
    server_name	www.ExactNameOther.com;
    root /var/www/test-1/;
        index ExactNameOther.html;
}
# 包含正则表达式,并且正则表达式能匹配上,在确切名称配置前面
server {
	listen      80;
    server_name	~^www\.Ex*+\.com$;
    root /var/www/test-1/;
    index ExactName-RE.html;
}
# 包含通配符,并且能匹配上网址,在确切名称配置前面
server{
	listen      80;
    server_name	*.ExactName.com www.ExactName.*;
    root /var/www/test-1/;
    index ExactName-WildCard.html;
}
# 确切名称的网址
server {
	listen      80;
    server_name	www.ExactName.com;
    root /var/www/test-1/;
    index ExactName.html;
}

结果

在这里插入图片描述

2.以星号开头的最长通配符

同样能匹配的几条规则中,最长前缀的匹配的上,即使位置在后面

文件目录

配置文件内容

# 同样能匹配输入网址www.Wildcard.com,较少确切的字符个数,但在前面
server {
	listen      80;
    server_name	*.com;
    root /var/www/test-2/;
    index ShorterWildcard.html;
}

# 同样能匹配输入网址www.Wildcard.com, 星号结尾,但在前面
server {
	listen      80;
    server_name	www.Wildcard.*;
    root /var/www/test-2/;
    index Wildcard-End.html;
}

# 同样能匹配输入网址www.Wildcard.com,正则表达式,但在前面
server {
	listen      80;
    server_name	~^.*\.Wildcard.com$;
    root /var/www/test-2/;
    index Wildcard-Reg.html;
}

# 同样能匹配输入网址www.Wildcard.com,但是确切的字符个数更长
server {
	listen      80;
    server_name	*.Wildcard.com;
    root /var/www/test-2/;
    index LongestWildcard.html;
}

结果

在这里插入图片描述

3.以星号结尾的最长通配符

同样能匹配的几条规则中,最长前缀的匹配的上,即使位置在后面

文件目录

配置文件内容

# 同样能匹配输入网址www.Wildcard.com,较少确切的字符个数
server {
	listen      80;
    server_name	www.*;
    root /var/www/test-3/;
    index ShorterWildcard-End.html;
}

# 同样能匹配输入网址www.Wildcard.com,正则表达式,但在前面
server {
	listen      80;
    server_name	~^.*\.Wildcard.com$;
    root /var/www/test-2/;
    index Wildcard-Reg.html;
}

# 同样能匹配输入网址www.Wildcard.com,但是确切的字符个数更长
server {
	listen      80;
    server_name	*.Wildcard.com;
    root /var/www/test-3/;
    index LongestWildcard-End.html;
}

结果

在这里插入图片描述

4.第一个匹配的正则表达式(按配置文件中出现的顺序)

无论确切字符个数的多少,最先加载的配置优先

配置文件内容

# 同为能匹配上的正则表达式,确切的字符个数较少,但在前面
server {
	listen      80;
    server_name	~^.*.com$;
    root /var/www/test-4/;
    index RegEx.html;
}
# 同为能匹配上的正则表达式,确切的字符个数多,但在后面
server {
	listen      80;
    server_name	~^.*RegEx.com$;
    root /var/www/test-4/;
    index RegEx-exacted.html;
}

结果

在这里插入图片描述

总结

1.所有规则分配到各自类,优先级如下,找到第一个符合的类别即停止

在这里插入图片描述

2.在符合的类别中搜索所有符合的规则,并按各自类别优先级规则处理

类别2. 以星号开头的最长通配符

类别3. 以星号结尾的最长通配符

类别4. 第一个匹配的正则表达式(按配置文件中出现的顺序)

如果有相同配置,Nginx会给出警告,但仍能启动, 会选择最先找到规则

# 以下仅给出ExactName示范, 通配符和正则表达式也适用
server {
    listen      80;
    server_name    same.name.com;
    .......
}
server {
    listen      80;
    server_name    same.name.com;
    .......
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值