php-fpm 访问日志应包含从 php 应用程序设置的自定义变量

php-fpm access log should contain custom variables set from php application

当前设置是使用 apache+mod_php 进行的。我们可以使用 apache_setenv 将代码中设置的 apache 访问日志 userId 和 sessionId 放入,然后在访问日志中我们得到:

"\"%{USER_ID}e\" \"%{SESSION_ID}e\""

这对于我们能够根据访问日志轻松调试信息是必要的。

特征

考虑以下设置:php 在 php-fpm 上运行的应用程序,使用 nginx 作为反向代理。

我想转移到使用 php-fpm 和 nginx 的容器化应用程序。问题是我不是 table 使用 $_ENV 将动态变量记录到 nginx 或 php-fpm 日志。数据存在于 $_SERVER 的转储中,但无法从 php-fpmnginx-acces 日志中访问。

问题

  1. If Im able to set fastcgi_param in nginx from env variable that comes from application case is closed.在 nginx 中使用 lua 和 os.getenvvariable 应该可以解决问题吗?
  2. 在 php-fpm 访问日志格式 %{userId}e%{sessionId}e 中,尽管它们存在于 var_dump($_SERVER) 中。如果我从 nginx fastcgi_param 传递静态值,我可以在 php-fpm.
  3. 中访问这样的环境变量

是否有任何其他选项可以实现此目的,或者 nginx 中的 LUA 是唯一的选项。目前正准备试用

我的解决方案使用自定义 http headers:

header("UserId: 1");
header("SessionId: session_id");

然后在nginx访问日志中

log_format main "$upstream_http_userid $upstream_http_sessionid";

如果是 apache 访问日志

LogFormat "%h %l %u %t \"%r\" %>s %O %{UserId}o %{SessionId}o"