欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > nginx配置中的服务器名称

nginx配置中的服务器名称

2025/10/7 6:54:48 来源:https://blog.csdn.net/axe6404/article/details/141953459  浏览:    关键词:nginx配置中的服务器名称

通常,在nginx的配置节中:

server {listen       80;server_name  example.org  www.example.org;...
}

server_name(服务器名称) 指令定义确定哪个服务器块用于给定请求。可以使用确切名称、通配符名称、ip地址或正则表达式来定义它们:

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

按名称搜索虚拟服务器时,如果 name 与多个 指定的变体,例如通配符名称和正则表达式都匹配, 将按以下优先顺序选择第一个匹配的变体:

  1. 精确名称
  2. 以星号开头的最长通配符名称,例如 *.example.org
  3. 以星号结尾的最长通配符名称,例如 mail.*
  4. 第一个匹配的正则表达式 (按在配置文件中出现的顺序)

正则表达式名称

nginx 使用的正则表达式与使用的正则表达式兼容 通过 Perl 编程语言 (PCRE)。 要使用正则表达式,服务器名称必须以波浪号 字符:

server_name  ~^www\d+\.example\.net$;

否则,它将被视为确切名称,或者如果表达式包含 星号,作为通配符名称(很可能是无效名称)。 不要忘记设置 “” 和 “” 锚点。 它们不是语法上的要求,而是逻辑上的要求。 另请注意,域名点应使用反斜杠进行转义。 包含字符 “” 的正则表达式 和 “” 应引用:^${}

server_name  "~^(?<name>\w\d{1,3}+)\.example\.net$";

否则 nginx 将无法启动并显示错误消息:

directive "server_name" is not terminated by ";" in ...

命名正则表达式捕获稍后可用作变量:

server {server_name   ~^(www\.)?(?<domain>.+)$;location / {root   /sites/$domain;}
}

PCRE 库使用以下语法支持命名捕获:

?<name>Perl 5.10 兼容语法,自 PCRE-7.0 起支持
?'name'Perl 5.10 兼容语法,自 PCRE-7.0 起支持
?P<name>Python 兼容语法,自 PCRE-4.0 起支持

如果 nginx 启动失败并显示错误消息:

pcre_compile() failed: unrecognized character after (?< in ...

这意味着 PCRE 库是旧的,并且语法 应该改为尝试 “”。 捕获也可以以数字形式使用:?P<name>

server {server_name   ~^(www\.)?(.+)$;location / {root   /sites/$2;}
}

但是,这种用法应仅限于简单的情况(如上所示), 因为数字参考很容易被覆盖。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词