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 ~^www\d+\.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>\w\d{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;
}
}

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

待续...

Nginx server_name翻译的更多相关文章

  1. nginx server_name 多个

    nginx server_name 多个 nginx server_name 多个的话,空格隔开就行 server_name baidu.com baidu.me; 如果很多的话可以用正则,我的需求, ...

  2. 记一个nginx server_name配置多个时的坑

    文章转载自:https://blog.csdn.net/u011296355/article/details/106740860/ 背景 为了区分线上环境和测试环境,我弄了个自己测试专用的域名test ...

  3. centos nginx server_name 配置域名访问规则

    今天配置Server_name时,希望禁用一些域名,应为这些域名我想让通过另外一个Server配置 server_name "~^((\w*[^w]{1}\w*)|w{1,2})\.hell ...

  4. nginx server_name

    在我的机子了nginx的  server_name要配制成127.0.0.1才能用,否则就报错,刚试用nginx还不知道为什么,先记下来

  5. [Nginx][HttpUpstreamModule]翻译负载均衡

    英文原文地址:http://nginx.org/en/docs/http/ngx_http_upstream_module.html 大纲: 示例 指令 嵌入变量 ngx_http_upstream_ ...

  6. nginx server_name匹配顺序

    server_name可为IP/domain/localhost/null等任何字符串(字符串server_name也可以用来匹配),注意各个 server 块的顺序. 1.如果只有一个server, ...

  7. Nginx server_name 正则泛域名反向代理两例

    最近在学习Nginx搭建负载均衡系统,感觉系统部署方式的思路瞬间开阔了很多. 负载均衡服务器的后端服务器上各自有一套功能相同的WEB管理系统,主要作用是方便的对各自服务器的IIS站点及服务器防火墙测量 ...

  8. docker学习之路-nginx镜像(翻译)

    本篇来自https://hub.docker.com/_/nginx/?tab=description 它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等.从这里你可以找 ...

  9. Nginx配置翻译

    Windows 格式 server { listen 82; server_name localhost; root "D:/testfile/"; location / { in ...

随机推荐

  1. 轻量级 Java 基础开发框架,Solon & Solon Cloud 1.5.40 发布

    Solon 已有120个生态扩展插件,此次版本以细节打磨为主: 增加 mybatisplus-solon-plugin 插件 //至此,Solon 已完成国内外主流的5个ORM框架插件适配 插件 so ...

  2. 微服务安全(二)OAuth 2.0

    1. 概念 OAuth是一个开放的.安全的用户认证协议,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无须将用户名和登录口令提供给第三方应用.授权的第三方应用只能在特定的时段内访问特定 ...

  3. 10.11 HTTPS

    没有HTTPS的抓包截图 HTTPS=HTTP + TLS/SSL https 实现过程如下 1.客户端发起HTTPS请求 rewrite www.baidu.com https://www.baid ...

  4. VirtualBox上安装Debian10个人备忘笔记

    准备 VirtualBox 下载链接:Downloads – Oracle VM VirtualBox,下载完成后安装即可. Debian 下载链接:通过 HTTP/FTP 下载 Debian CD/ ...

  5. python中冒泡排序代码实现

    1.冒泡排序代码如下图: #冒泡算法l=[12,4,56,10,6,2]for i in range(0,6): for j in range(i+1,6): if l[i]>l[j]: a=l ...

  6. keras框架下的深度学习(一)手写体识别

    这个系列文章主要记录使用keras框架来搭建深度学习模型的学习过程,其中有一些自己的想法和体会,主要学习的书籍是:Deep Learning with Python,使用的IDE是pycharm. 在 ...

  7. (四)、Docker 镜像

    1.Docker镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 2.Do ...

  8. Noip模拟57 2021.9.20

    规律总结:联考必爆炸 T1 2A 没$A$掉的大水题,但是是真的不知道$000$前面的$00$也算先导$0$,以后要长记性,这种东西不能再错了 再打三遍: $000$前面的$00$也算先导$0$ $0 ...

  9. 2021.9.28考试总结[NOIP模拟64]

    T1 三元组 发现确定\(b,c\)的情况下,\(a\)的值域是连续的.确定\(b\)后\(a+b\)的取值是\([1+b,b+b]\).树状数组维护对每个\(b\)可行的\(c\). 注意取模后取值 ...

  10. 疯狂Java基础Day1

    --每过一遍基础,都是一次提升! 太多遗忘了,慢慢补... 推一个Java学习教程--->b站搜:狂神说Java系列(排序完毕) 推荐原因:讲的不错,会涉及到底层,也会讲讲面试. 一.注释 主要 ...