服务器名是使用 server_name 指令定义的,并确定哪个 server 块用于给定的请求。参见“nginx 如何处理请求”。
它们可以使用精确名称、通配符名称或正则表达式来定义:
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
server {
listen 80;
server_name ~^(?<user>.+)\.example\.net$;
...
}
当按名称搜索虚拟服务器时,如果名称匹配多个指定的名称,例如,通配符名称和正则表达式名称都匹配,第一个匹配的名称将被选择,优先顺序如下:
- 精确的名称
- 以
*
开头的最长的通配符名称,例如*.example.org
- 以
*
结尾的最长的通配符名称,例如mail.*
- 第一个匹配的正则表达式名称(按配置文件中出现的顺序排列)
通配符名称
通配符名称只能在名称的开始或结束处包含星号,并且只能在点符号 . 的旁边。名称 www.*.http://example.org 和 w*.http://example.org 都是无效的。
但是,可以使用正则表达式指定这些名称,例如:~^www\..+\.example\.org$ 和 ~^w.*\.example\.org$。星号可以匹配多个名称部分。
*.http://example.org 不仅可以匹配 http://www.example.org 也可以匹配http://www.sub.example.org。
.http://example.org 是一个特殊的通配符名称,它可以匹配确切的名称 http://example.org 和通配符名称 *.http://example.org。
正则表达式名称
nginx 使用的正则表达式与 Perl 编程语言(PCRE)使用的正则表达式是兼容的。要使用正则表达式,服务器名必须以波浪字符开头:
server_name ~^www\d+\.example\.net$;
否则,它将被视为精确名称,或者如果表达式包含星号&#