Laravel,PHP 7.3 nginx 502上游提前关闭FastCGI标准输出

Laravel,PHP 7.3 nginx 502上游提前关闭FastCGI标准输出,php,laravel,nginx,Php,Laravel,Nginx,我在nginx后面有一个laravel应用程序,最近将php从7.1版升级到7.3版docker image 7.1-fpm-alpine到7.3-fpm-alpine 我使用具有呈现函数的异常来输出错误页面。Laravel记录异常消息并完成stacktrace 自从更新到PHP7.3之后,nginx显示了默认的502错误页面,并记录了[error]1111:*61上游在从上游读取响应头时过早关闭了FastCGI标准输出,客户端:[……]。nginx中的stacktrace在2048字节后被截断

我在nginx后面有一个laravel应用程序,最近将php从7.1版升级到7.3版docker image 7.1-fpm-alpine到7.3-fpm-alpine

我使用具有呈现函数的异常来输出错误页面。Laravel记录异常消息并完成stacktrace

自从更新到PHP7.3之后,nginx显示了默认的502错误页面,并记录了[error]1111:*61上游在从上游读取响应头时过早关闭了FastCGI标准输出,客户端:[……]。nginx中的stacktrace在2048字节后被截断

serverfault问题表明nginx只处理2048字节以内的错误

在PHP7.1中,stacktrace已经被截断

我说的对吗,问题是PHP现在记录完整的堆栈跟踪,而不是截断它

有没有办法截断PHP中的日志输出以返回PHP7.1的行为?

我的应用程序使用errorlog日志驱动程序,我遇到了同样的问题。实际上,在Laravel中,我以以下方式修改了app/Exceptions/Handler.php,这是受您的问题启发的:

公共函数报告异常$exception { $message=get_class$exception.:{$exception->getMessage}.Trace:\n{$exception->getraceasstring}; 错误_logsubstr$消息,0,2048; }
substr部分是实现这个技巧的关键。不过,我仍然需要开发一个更好、更通用的解决方案,因为这只是一个快速修复。

默认情况下,PHP 7.3的功能应该与以前的版本相同,它将截断1024个字符,但有:

对数极限整数 记录行的日志限制,允许记录长度超过1024个字符的消息,而无需包装。默认值:1024。从PHP7.3.0开始提供

我在使用官方Docker PHP 7.3容器时遇到了这个问题,该容器专门覆盖了

可以通过覆盖log_limit进行修复,使其处于nginx 2048的限制范围内:

[global]
log_limit = 1024

似乎是一个很好的解决办法,谢谢你的回答。如果在一段时间内没有更好的解决方案,我会将其标记为已接受。如果找到了更好的解决方案,您可以更新您的答案,那就太好了。相关内容来自:如果您希望日志行长度超过2048字节,您需要重新编译Nginx。因此,在Docker环境中通常不可能修改此限制,因此非常需要根据您的答案覆盖日志限制。
[global]
log_limit = 1024