Nginx 服务器名称优先级

Nginx server names priority

我在不同文件中有两个用于 nginx 的服务器部分。

第一个:

server {
  server_name _;
  ...   
}

第二个:

server {
  server_name ~someRegex;
  ...
}

我有一些限制 - 我无法更改第一个服务器部分(即我无法编辑第一个文件)

文档说明了服务器名称优先级的以下内容:

  1. exact name
  2. longest wildcard name starting with an asterisk, e.g. “*.example.org”
  3. longest wildcard name ending with an asterisk, e.g. “mail.*”
  4. first matching regular expression (in order of appearance in a configuration file)

据我所知,server_name _ 用作万能服务器。

所以当我有来自主机的请求匹配时,一些 Regex 请求由第一个服务器部分处理。有没有办法通过第二个服务器部分处理这些请求?

不完全是。

_ 只会使 server_name 无效。参见 this document

使 server 块成为默认块的原因是首先为给定端口定义或使用 listen ... default_server 修饰符定义。参见 this document

因此,假设您的正则表达式有效并且第二个服务器块确实已由 nginx 安装,那么您的配置将按预期工作。重新加载后检查错误日志 nginx and/or 使用

测试配置
nginx -t