无法在 nginx 的 “if” 正则表达式中使用变量?
背景
公司为所有县域电视台开发了一套新媒体管理后台系统,为每个电视台使用唯一的 Token 作为标识。现针对电视台的微信投票日志做统计,其中需要把投票用户的 Cookie 记录到 Nginx 投票日志中,但用户的 Cookie 键名中有电视台 Token 做标识,所以在 Nginx 中加入正则进行匹配 Cookie 变量名的操作。
代码实现
- 首先在 Nginx 的主配置文件 nginx.conf 中定义好 log_format 日志格式,这里展示一些主要的日志配置信息
log_format cookie_log '$time_local -- $remote_addr -- "$host" -- ... -- "$http_x_forwarded_for" -- $union_cookie -- $http_cookie';
-
在 Server 块中对获取 Cookie 进行相关配置
sever { ... access_log /var/log/access_log union_log; set_unescape_uri $token $arg_token; #存储Cookie的键名的参数 set $union_token_name "wechaid_$token"; set $union_cookie ""; if ($http_cookie ~* "$union_token_name=(.+?)(?=;|$)") { set $union_cookie $1; } ... }
问题
if 正则表达式中使用 $union_token_name
变量的匹配测试不生效,我试着把 $union_token_name
变量内容替换成字符串却可以获取到 Cookie 的值。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: