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

时间:2019-05-08 13:59:47

标签: php nginx openresty access-log

Pre

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

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

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

功能

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

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

问题

  1. 如果无法根据应用案例的env变量在nginx中设置fastcgi_param,则将关闭。在nginx中将lua与os.getenvvariable一起使用应该可以解决问题吗?
  2. 采用php-fpm访问日志格式%{userId}e%{sessionId}e,尽管它们以var_dump($_SERVER)存在。如果我从nginx fastcgi_param传递静态值,则可以在php-fpm中访问此类环境变量。

是否有其他选择可以实现此功能,或者nginx中的LUA是唯一的选择。目前,我正在尝试。

1 个答案:

答案 0 :(得分:1)

我的解决方案使用自定义的HTTP标头结束了

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

,然后在nginx访问日志中

log_format main "$upstream_http_userid $upstream_http_sessionid";