如何将最近设置的 cookie 添加到 nginx 的访问日志中

如何将最近设置的 cookie 添加到 nginx 的访问日志中

我想将 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 后使用重定向并在下一次请求中执行适当的操作?

相关内容