背景
公司為所有縣域電視臺開發了一套新媒體管理後臺系統,為每個電視臺使用唯一的 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 的值。