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

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

相关文章

  • Rhit高效可视化Nginx日志查看工具

    Rhit高效可视化Nginx日志查看工具

    一个格式化 Nginx 日志,可快速阅读、查看 Nginx 日志的工具。 可以每秒处理百万行日志数据,感兴趣的可以了解一下
    2021-10-10
  • Nginx日志统计分析的常用命令总结

    Nginx日志统计分析的常用命令总结

    这篇文章主要给大家总结了关于Nginx日志统计分析的一些常用命令,其中包括IP相关统计、页面访问统计、性能分析、蜘蛛抓取统计、TCP连接统计等相关命令的总结,相信对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 详解nginx实现ssl反向代理实战

    详解nginx实现ssl反向代理实战

    本篇文章主要介绍了nginx实现ssl反向代理实战,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Nginx的yum安装-Centos7过程

    Nginx的yum安装-Centos7过程

    本文详细介绍了如何在Linux系统上安装和配置Nginx服务器,包括安装yum工具包、创建Nginx yum源仓库、安装Nginx、启动Nginx、开启80端口以及相关命令总结
    2024-12-12
  • nginx地址重写、反向代理方式

    nginx地址重写、反向代理方式

    这篇文章主要介绍了nginx地址重写、反向代理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • nginx日志过大问题解决

    nginx日志过大问题解决

    nginx默认的日志在logs/access.log,并且是一直累加写入,时间长了就会非常大,本文主要介绍了nginx日志过大问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Nginx权限控制文件的预览和下载方式

    Nginx权限控制文件的预览和下载方式

    这篇文章主要介绍了Nginx权限控制文件的预览和下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • nginx配置https的方法示例(免费证书)

    nginx配置https的方法示例(免费证书)

    这篇文章主要介绍了nginx配置https的方法示例(免费证书),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • FastDFS+Nginx如何搭建本地服务器并实现远程访问

    FastDFS+Nginx如何搭建本地服务器并实现远程访问

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题,这篇文章主要介绍了FastDFS+Nginx搭建本地服务器并实现远程访问,需要的朋友可以参考下
    2023-11-11
  • nginx配置location总结location正则写法及rewrite规则写法

    nginx配置location总结location正则写法及rewrite规则写法

    本文详细讲述了Nginx location正则写法,Nginx 的Rewrite规则以及Nginx.conf中if指令与全局变量
    2018-10-10

最新评论