首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多变量的Nginx映射正则表达式为一个变量

问具有多变量的Nginx映射正则表达式为一个变量
EN

Stack Overflow用户
提问于 2019-08-29 11:16:41
回答 1查看 1.6K关注 0票数 1

使用regex将变量映射到$clientIP。

多个CDN背后的CDN服务器,客户端实际ip的自定义报头不同。所以我拿出了下面的表达式。

代码语言:javascript
复制
#here I use @ as seperator
map "$http_cf_connecting_ip@$http_cdn_src_ip@$http_src_ip@$http_client_ip" $clientIP {

          "~[^-]+@-@-@-$"       $http_cf_connecting_ip;                 
          "~^-@[^-]+@-@-$"      $http_cdn_src_ip;        
          "~^-@-@[^-]+@-$"      $http_src_ip;             
          "~^-@-@-@[^-]+$"      $http_client_ip;
          "~^-@-@-@-$"          $remote_addr;
          default               $remote_addr;
}

我使用邮递员发送自定义的http标头。但是看起来地图总是会变成默认的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 12:33:50

空变量可能只是空的,而不是包含文字连字符的。访问日志使用连字符表示空值。

您可以重写正则表达式以匹配空变量,也可以只使用命名捕获来匹配包含有效IP地址的第一个位置。

例如:

代码语言:javascript
复制
map "$http_cf_connecting_ip@$http_cdn_src_ip@$http_src_ip@$http_client_ip" $clientIP {
    ~(^|@)(?<ipaddr>\d+\.\d+\.\d+\.\d+)($|@)    $ipaddr;
    default                                     $remote_addr;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57708988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档