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 { |