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

 更新时间:2026年04月27日 10:16:02   作者:LeoForBest  
本文主要介绍了Nginx配置文件中不同匹配规则的优先,包括精确匹配、以星号开头的最长通配符、以星号结尾的最长通配符以及第一个正则表达式匹配,总结了Nginx处理匹配规则的优先机制,以及注意事项

测试环境

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx对网段内ip的连接数限流配置详解

    Nginx对网段内ip的连接数限流配置详解

    这篇文章主要介绍了Nginx对网段内ip的连接数限流配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 前端如何修改nginx配置(在VSCode)

    前端如何修改nginx配置(在VSCode)

    前端开发中Nginx是最常用的 Web 服务器和反向代理工具,主要用于部署静态资源、处理跨域、配置缓存策略等,这篇文章主要介绍了前端如何修改nginx配置的相关资料,需要的朋友可以参考下
    2025-09-09
  • 实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

    实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

    最近在本地搭建的LNMP的开发环境。为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php.ini中的一些错误提示。但是这样一来,就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题
    2014-05-05
  • nginx配置多个前端项目实现步骤

    nginx配置多个前端项目实现步骤

    本文主要介绍了nginx配置多个前端项目实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Nginx的c30k问题解决方法

    Nginx的c30k问题解决方法

    这篇文章主要介绍了Nginx的c30k问题解决方法,本文同时探讨了Nginx AIO的使用问题,需要的朋友可以参考下
    2014-09-09
  • Windows nginx安装教程及简单实践

    Windows nginx安装教程及简单实践

    这篇文章主要介绍了Windows nginx安装教程及简单实践的相关资料,需要的朋友可以参考下
    2016-10-10
  • nginx变量的使用详解

    nginx变量的使用详解

    这篇文章主要介绍了nginx变量的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Nginx高可用(主从、主主模式)的项目实践

    Nginx高可用(主从、主主模式)的项目实践

    本文介绍了Nginx高可用性的两种主要解决方案,主从架构和主主架构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Nginx 499错误问题及解决办法

    Nginx 499错误问题及解决办法

    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,接下来通过本文给大家介绍Nginx 499错误问题及解决办法,一起看看吧
    2016-06-06
  • 使用nginx实现动静分离

    使用nginx实现动静分离

    这篇文章主要为大家详细介绍了使用nginx实现动静分离,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论