【问题标题】:How to prevent Nginx from capturing errors from FastCGI/PHP-FPM?如何防止 Nginx 从 FastCGI/PHP-FPM 捕获错误?
【发布时间】:2016-08-25 13:06:39
【问题描述】:

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

这是一个例子:

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

同样的日志是它们作为错误添加到 Nginx 的日志文件中的:

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

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

【问题讨论】:

  • 你发现了吗?我在 nginx 上,我有通过 php error_log 方法传递的自定义消息。但是当它到达 nginx 日志时,即使自定义消息是 DEBUG 类型,它也会在一些日志的开头在 stderr 中发送 FastCGI。如果您已经弄清楚了,将非常感谢您的意见。谢谢!

标签: php nginx fastcgi


【解决方案1】:

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

php_admin_flag[fastcgi.logging] = off

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

【讨论】:

  • 稍微扩展一点,catch_workers_output 将从所有子进程中获取 stderr 并将其重定向到 php-fpm 错误日志,您可能希望它是 yes 或者错误输出只是丢弃。而fastcgi.logging则只影响是否发回web服务器,但会继续输出到php-fpm错误日志(可能是/dev/stderr,与fcgi_stderr是分开的!)
【解决方案2】:

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

catch_workers_output = no

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

【讨论】:

  • 不幸的是,这只是抑制了工作人员的所有日志。它们甚至不会被放入 PHP 错误文件中。
  • 尝试更改 error_log 指令的值(make 是一个文件,比如 /var/log/php-fpm.www.log),使用 @ 的原始值987654325@.
  • error_log 已设置并正常工作。我在用yesno 测试catch_workers_output 后写了上面的评论。这是我的配置文件,顺便说一句:github.com/gnarea/docker-alpine-php-fpm/blob/…
  • 我发现将 catch_workers_output 设置为 no 会抑制来自 FPM 的日志,但它们仍然出现在 nginx 日志中,需要相反的效果(来自 FPM 的日志可见,nginx fastcgi 日志被抑制
猜你喜欢
  • 2013-08-12
  • 2011-03-12
  • 2013-12-24
  • 2020-04-29
  • 2017-01-19
  • 2013-04-08
  • 2013-09-28
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多