nginx映射主机/主机名,子域中的标签部分匹配

时间:2019-04-11 12:50:08

标签: nginx

我们的域名看起来像xxx.dev.example.com和xxx.acc.example.com,其中xxx是网站的唯一标识符。子域中的{dev}或{acc}部分可以是 dev acc pro sand 在DTAP中定义服务器。让我们称之为server_version。结果我们应该有

  • xxx.dev.example.com
  • xxx.acc.example.com
  • xxx.pro.example.com

现在,我需要使用一个映射来标识server_version(dev,acc等)并设置一个变量。

如果尝试了几种方法,现在又无法使用完整的正则表达式。但是必须有一种更聪明/更好的方法来做到这一点。

我们尝试过:

map $host $AUTH_FLAG {
        hostnames;
        default "off";
        *.dev.* "off";
        *.acc.* "Restricted";
}

但这是不允许的,因为有多个通配符(从http://nginx.org/en/docs/http/ngx_http_map_module.html处获取)...由于子域有两个前缀,我们需要使用通配符。匹配的元素不是第一个子域标签,而是第二个(甚至可以在域名中的任何位置找到字符串都可以)

我尝试了

map $host $AUTH_FLAG {
        hostnames;
        default "off";
        .dev. "off";
        .acc. "Restricted";
}

这也不起作用。

因此,现在我可以使用以下方法进行工作。但是我敢肯定,必须有更好的方法来做到这一点。

map $host $ROOTLBL {
        hostnames;
        default "pro";
        ~*^.*\.dev\..* "dev";
        ~*^.*\.acc\..* "acc";
        ~*^.*\.pro\..* "pro";
}

问题:在多标签子域(例如xxx.yyy.example.com)中匹配标签的首选方法是什么?

帮助表示赞赏。真的很喜欢用正确的方式做

0 个答案:

没有答案