zoukankan      html  css  js  c++  java
  • Nginx server_name翻译

    http://nginx.org/en/docs/http/server_names.html#regex_names

    匹配优先顺序

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

    含通配符的server_name

    1. 通配符只能在server_name的开头或结尾,且星号只能在"."的外面包含。
    2. 尽管"www.*.example.org"和"w*.example.org"是无效的,但是可以使用正则表达式指定这些名称,如"^www..+.example.org$"和"^w.*.example.org$"。
    3. 还有一种特殊形式:".example.org"既可以精确匹配"example.org",又可以匹配通配符形式的"*.example.org"。

    使用正则表达式的server_name

    1. nginx使用的正则表达式与Perl编程语言(PCRE)使用的正则表达式兼容。要使用正则表达式,服务器名称必须波浪号开头:
    server_name ~^wwwd+.example.net$;
    
    表达式 描述
    ^ 匹配字符开头的字符
    $ 匹配字符结尾的字符
    x? 匹配 0 次或一次 x 字符串
    . 匹配除换行符以外的所有字符
    .* 匹配 0 次或多次的任何字符
    .+ 匹配 1 次或多次的任何字符
    d 匹配一个数字的字符,和 [0-9] 语法一样
    d+ 匹配多个数字字符串,和 [0-9]+ 语法一样
    w 英文字母或数字的字符串,和 [a-zA-Z0-9_] 语法一样
    w+ 和 [a-zA-Z0-9_]+ 语法一样
    {m,n} 匹配在 m个 以上 n个 以下 的指定字符串

    参考自:https://www.runoob.com/perl/perl-regular-expressions.html

    1. 如果不以波浪号开头,则将被视作精确名称或者通配符名称(如果包含星号)。
    2. 一定要加上'^'和'$'锚点,虽然在语法上不是必需的,但在逻辑上,是有必要的。
    3. 注意,域名的点'.'应以反斜杠转义:'.'。否则将被视作正则匹配符号。
    4. 包含字符"{"和"}"的正则表达式应加引号:
    server_name "~^(?<name>wd{1,3}+).example.net$";
    
      否则,nginx将无法启动并报错:directive "server_name" is not terminated by ";" in ...
    
    1. 一个被命名了的正则表达式捕获可在以后用作变量:
    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> 自PCRE-4.0起受支持的Python兼容语法

    如果nginx无法启动并显示错误消息:pcre_compile() failed: unrecognized character after (?< in ...
    这意味着PCRE库很旧,应尝试使用语法"?P<name>"。捕获也可以以数字形式来引用:

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

    但是,考虑到数字形式的引用很容易被覆盖,所以这种用法应仅限于简单的情况(像上面的例子)。

    待续...

    ================# 水平有限 欢迎留言 批评指正 #=================
  • 相关阅读:
    atom编辑器中编辑C代码调用printf函数打印中文字符出现乱码
    C 库函数
    函数原型、函数声明和函数定义之间关系
    函数指针
    const 类型限定符
    AttributeError: 'str' object has no attribute '__buffer__'
    python3继承中发生的显式覆盖
    python3中的隐式继承
    黑科技
    理解jquery的$.extend()、$.fn和$.fn.extend()
  • 原文地址:https://www.cnblogs.com/max27149/p/13231630.html
Copyright © 2011-2022 走看看