nginx虚拟服务名称详解,不信你有我全

本文详细解析了nginx中server_name指令的用法,包括精确名称、通配符和正则表达式的匹配规则,以及服务器名称的选择过程和优化策略。同时,介绍了不同版本的nginx对服务器名称的支持情况。
摘要由CSDN通过智能技术生成

服务器名是使用 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$;
    ...
}

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

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

通配符名称

通配符名称只能在名称的开始或结束处包含星号,并且只能在点符号 . 的旁边。名称 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$;

否则,它将被视为精确名称,或者如果表达式包含星号&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值