如何防止 Nginx 从 FastCGI/PHP-FPM 捕获错误?

Gus*_*rea 6 php fastcgi nginx

我在 PHP 5.6.20 前面通过 FastCGI (PHP-FPM) 使用 Nginx 1.8.1 作为反向代理,我发现来自 PHP 的所有通知/警告/错误日志也在 Nginx 中记录为错误。有什么办法可以防止此类日志传播到 Nginx 的日志?我希望他们只登录 PHP 的日志文件。

下面是一个例子:

[2016 年 4 月 29 日 22:23:10] 警告:[pool www] child 20 对 stderr 说:“注意:PHP 消息:PHP 警告:phpinfo():依赖系统的时区设置是不安全的。你需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种但仍然收到此警告,则很可能是时区标识符拼错了。我们现在选择了时区“UTC”,但请设置 date.timezone 以选择您的时区。在第 2 行的 /opt/web-app/index.php 中”

相同的日志作为错误添加到 Nginx 的日志文件中:

2016/04/29 22:23:10 [error] 6#0: 1 FastCGI sent in stderr: "PHP message: PHP Warning: phpinfo(): 依赖系统的时区设置是不安全的。你是*必需的使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能是您拼错了时区标识符。我们现在选择了时区“UTC”,但请设置 date.timezone 以选择您的时区。在第 2 行的 /opt/web-app/index.php 中”,同时从上游读取响应标头,客户端:172.18.0.1,服务器:,请求:“GET /favicon.ico HTTP/ 1.1", 上游: "fastcgi://172.18.0.2:9000", 主机: "localhost:8080", referrer: " http://localhost:8080/index.php "

我可以对NginxPHP-FPM 的非常简单的配置文件进行任何更改吗?

小智 6

我一直在研究同样的问题,经过一番尝试和错误后,对我有用的是将以下内容添加到 php-fpm 池配置中。我假设可以通过其他方式设置相同的标志,例如主php.ini文件。

php_admin_flag[fastcgi.logging] = off
Run Code Online (Sandbox Code Playgroud)

相关文档在这里:https://www.php.net/manual/en/ini.core.php#ini.fastcgi.logging


T0x*_*ode 0

更改为catch_workers_output应该no可以解决问题:

catch_workers_output = no
Run Code Online (Sandbox Code Playgroud)

这将使 php 按照配置记录消息,但阻止这些消息通过 fastcgi 连接传递到 nginx。