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



pre

当前设置是用apache mod_php制成的。我们可以使用apache_setenv从代码中放入Apache访问日志用户ID和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。与OS一起在Nginx中使用LUA。
  2. 在php-fpm中,访问日志格式 %{userId}e%{sessionId}e尽管存在于 var_dump($_SERVER)中。如果我从Nginx fastcgi_param传递具有静态值,我可以在php-fpm中访问此类环境变量。

是否还有其他选项可以使此操作或nginx中的lua是唯一的选择。目前我将要尝试。

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

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"

最新更新