当前位置: 代码网 > it编程>数据库>Redis > Nginx配置之虚拟主机server_name优先级方式

Nginx配置之虚拟主机server_name优先级方式

2026年04月27日 Redis 我要评论
测试环境nginx 1.10.3 (nginx version: nginx/1.10.3 (ubuntu))ubuntu 16.04.4 lts x64 (ip:192.168.241.132)ch

测试环境

  • 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;
    .......
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com