nginx可通过$cookie_xxx变量直接提取对应名称的cookie值,无需正则或额外模块,变量名须与cookie名严格一致(大小写敏感);配合$remote_addr、$request_id、$time_iso8601等字段可构建完整用户行为链。

直接用 $cookie_名称 变量就能记录会话 Cookie,无需正则、不改代码、不装模块,关键是变量名必须和真实 Cookie 名完全一致(大小写敏感),且该 Cookie 必须出现在请求头中。
用内置变量精准提取 Session ID
Nginx 在解析请求时,会自动把 Cookie: sessionId=abc123 这样的键值对映射成 $cookie_sessionId 变量。只要前端设置的是:
-
Set-Cookie: JSESSIONID=7B8A9F2E; Path=/→ 日志里写$cookie_JSESSIONID -
Set-Cookie: session_id=xyz789; Domain=.example.com→ 日志里写$cookie_session_id
变量未匹配时自动记为 -,不会导致日志字段错位。
组合关键字段还原用户行为链
单靠 Session ID 不足以追踪轨迹,需叠加上下文信息形成完整链条:
- 真实客户端 IP:配合
set_real_ip_from+real_ip_header X-Forwarded-For,避免代理污染 - 请求唯一标识:
$request_id必须写入日志,并通过X-Request-ID头透传到后端 - 高精度时间戳:
$time_iso8601(纳秒级)比$time_local(秒级)更适合排序与关联 - 操作语义:URI 或 query 中带动作标识,如
/api/v1/order?op=create,便于后续按行为聚类
配置示例:定义并启用审计日志格式
在 http 块中定义日志格式:
在 server 或 location 块中启用:
重载生效:nginx -s reload
注意事项与避坑点
- 不要用
$http_cookie记录整条 Cookie 字符串——体积大、含敏感信息、难结构化,仅调试阶段临时使用 - 若业务 Cookie 名含下划线或大小写混用(如
auth_token),变量名必须严格照写,$cookie_auth_token≠$cookie_authtoken - 前端未设置对应 Cookie、或浏览器禁用 Cookie 时,该字段恒为
-,属正常现象,不是配置错误 - 日志路径磁盘空间要预留充足,Session 审计日志建议单独存放、按日轮转、接入 ELK 或 Loki 做字段提取











