使用regex将变量映射到$clientIP。
多个CDN背后的CDN服务器,客户端实际ip的自定义报头不同。所以我拿出了下面的表达式。
#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标头。但是看起来地图总是会变成默认的。
发布于 2019-08-29 12:33:50
空变量可能只是空的,而不是包含文字连字符的。访问日志使用连字符表示空值。
您可以重写正则表达式以匹配空变量,也可以只使用命名捕获来匹配包含有效IP地址的第一个位置。
例如:
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;
}https://stackoverflow.com/questions/57708988
复制相似问题