我想将 cookie 数据包含在 nginx 访问日志中,如下所示:
(简化示例)
log_format foo '$remote_addr "$request" $cookie_bar';
access_log /var/log/nginx/access.log foo;
这对于已经有 cookie“bar”的请求非常有效,但对于我的服务器的第一个请求,nginx 会将“-”报告为“bar”的值。
我的问题似乎是 nginx 正在查看请求标头中的 cookie 值。有没有办法检查响应中的 Set-Cookie 并将其用作后备?
答案1
我找到了一个解决我的问题的巧妙方法,但它并不能彻底解决问题。
nginx 允许您将响应头元素传递到日志文件中,例如 Set-Cookie:
log_format foo '$remote_addr "$request" '
'$cookie_bar set_cookie=$sent_http_set_cookie';
不幸的是,它只输出第一个 Set-Cookie 命令,所以我需要确保我的应用服务器始终先设置 bar cookie。使用一个小正则表达式,我可以确保在未设置$sent_http_set_cookie
时获取设置的 cookie。$cookie_bar
答案2
您是否考虑过在设置 cookie 后使用重定向并在下一次请求中执行适当的操作?