1 | # 确切的server_name匹配 |
nginx将按照以下顺序对server_name进行匹配,和配置文件中的出现顺序无关
- 确切的名字
- 以星号开头的最长通配符名称
- 最长的通配符名称以星号结尾
- 第一个匹配正则表达式(按配置文件中的出现顺序)
注:只要有一项匹配以后就会停止搜索
通配符
- 通配符名称只可以在名称的起始处或结尾处包含一个星号,并且星号与其他字符之间用点分隔
www.*.example.org和w*.example.org都是非法的,请使用~^www\..+\.example\.org$和~^w.*\.example\.org$代替
正则表达式
- 为了使用正则表达式,虚拟主机名必须以波浪线
~起始否则该名字会被认为是个确切的名字 - 如果表达式含星号,则会被认为是个通配符名称
- 不要忘记设置“
^”和“$”锚点, 语法上它们不是必须的,但是逻辑上是的 - 域名中的点
.需要用反斜线\转义。含有{和}的正则表达式需要被引用
1 | server_name "~^(?<name>\w\d{1,3}+)\.example\.net$"; |
命名的正则表达式捕获组在后面可以作为变量使用:
1 | server { |
PCRE使用下面语法支持命名捕获组:
?<name>从PCRE-7.0开始支持,兼容Perl 5.10语法 ?'name'从PCRE-7.0开始支持,兼容Perl 5.10语法 ?P<name>从PCRE-4.0开始支持,兼容Python语法
或者
1 | server { |
杂项名称
空:""
如果服务器块中未定义server_name,则nginx使用空名称作为服务器名称
1 | server { |
下划线:_
1 | server { |
default_server
1 | http { |
1 | http { |