nginx配置中的服务器名称

server/2024/9/20 15:36:37/

通常,在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;}
}

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


http://www.ppmy.cn/server/114001.html

相关文章

Excel 将行和列转置的两种方法

方法一&#xff1a; 方法二&#xff1a;使用transpose公式

.NetCore+vue3上传图片 Multipart body length limit 16384 exceeded.

实现目标。点击图片上传头像 效果图 前端部分图片上传关键代码 <div class"avatar-wrap"><el-imagestyle"width: 154px; height: 154px":src"form.headPic":fit"fit"/></div><div class"upload-box"…

Android 串口数据分包处理

/* class PacketHandler { private static final byte PACKET_START 0x79; // 假设包的开始标记为0x79 private static final byte PACKET_END 0x0D; // 假设包的结束标记为0x0D private static ByteArrayOutputStream buffer new ByteArrayOutputStream();public static v…

区块链基础

密码学原理 密码学中的哈希原理有两个重要的性质 1 collision resistance 碰撞防御 亦或者称为collision free,主要是为了保密性。由于人为难以制造hash碰撞&#xff0c;因此hash可以用作与验证 2 hiding hash值可以从x -> f(x)&#xff0c;但是难以通过f(x)去反推出x。 验…

[数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8068 标注数量(xml文件个数)&#xff1a;8068 标注数量(txt文件个数)&#xff1a;8068 标注…

数据库英雄:探索MySQL高可用性的秘密武器

目录 一、引言 1.1 数据库高可用性的重要性 1.2 MySQL在现代架构中的角色 二、MySQL集群技术概览 2.1 集群技术的定义和目标 2.2 MySQL集群的类型和用例 三、搭建MySQL组从复制环境 3.1 环境准备和依赖安装 3.2 配置组从复制 3.3 当有数据时添加slave2 四、深入理解M…

Matlab simulink建模与仿真 第八章(数学运算库)【上】

参考视频&#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili 一、数学运算库中的模块概览 二、与加减相关的模块 1、Add加法模块与Subtract减法模块 &#xff08;1&#xff09;Add模块与Subtract模块的功能基本完全相同&#xff0c;不同的是它们的默认配置不一样&#…

关系操作符和条件操作符

1.关系操作符 C语言用于比较的表达式&#xff0c;被称为“关系操作符”&#xff08;relational expression&#xff09;,里面使用的运算符就被称为“关系运算符”&#xff08;relational operator&#xff09;,主要有下面6个&#xff1a; >大于运算符 <小于运算符 &g…