当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/294588.html

相关文章:

  • 【C知道】CSS3重要特性。
  • 机器学习-倒数5个项目(05)
  • Axure PR 9 多级下拉选择器 设计交互
  • ChatGPT键盘快捷键(按ctrl + /呼出)
  • Oracle简介、环境搭建和基础DML语句
  • 【c++丨STL】vector模拟实现
  • 家政上门小程序系统设计解析
  • C#语言实现最小二乘法算法
  • 怎么强制撤销excel工作表保护?
  • 深度学习从入门到精通——yolov1
  • F12抓包06-1:浏览器导出postman测试脚本
  • sicp每日一题[2.1]
  • docker 容器
  • 数据库 | 子查询 | sql执行顺序 | mysql是否运行
  • AI文献综述神器,有这一款就够了!
  • 《JavaEE进阶》----11.<SpringIOCDI【Spring容器+IOC详解+DI介绍】>
  • tcp 流量控制
  • 开发一款通过蓝牙连接控制水电表的微信小程序
  • ubuntu 安装python3 教程
  • 开篇_____何谓安卓机型“工程固件” 与其他固件的区别 作用
  • springboot websocket 服务端
  • 用 Python 编写桌面时钟程序
  • MATLAB绘图基础5:MATLAB数据导入
  • Redis总结,是什么,干什么,怎么利用?
  • element table 表格 span-method 某一列进行相同合并 支持树结构表格
  • 数据结构基础之《(2)—对数器》