Laravel、PHP 7.3 nginx 502 上游过早关闭 FastCGI 标准输出

Mar*_*kus 0 php nginx laravel

我在 nginx 后面有一个 Laravel 应用程序,最近将 php 从版本 7.1 更新到 7.3(docker image 7.1-fpm-alpine 到 7.3-fpm-alpine)。

我使用具有render()输出错误页面功能的异常。Laravel 会记录异常消息并完成堆栈跟踪。

由于更新到 php 7.3,nginx 显示它是默认的 502 错误页面和日志[error] 11#11: *61 upstream prematurely closed FastCGI stdout while reading response header from upstream, client: [...]。nginx 中的 stacktrace 在 2048 字节后被截断。

服务器故障问题“Nginx/PHP-FPM 长日志行被截断”表明 nginx 仅处理最多 2048 个字节的错误。

在 PHP 7.1 中,堆栈跟踪已经被截断了。

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

有没有办法在 PHP 中截断日志输出以返回到 PHP 7.1 的行为?

小智 5

默认情况下,PHP 7.3 的功能应该与以前的版本相同(它会截断 1024 个字符),但有新的配置以允许更多字符

log_limit integer 记录行的日志限制,允许记录超过 1024 个字符的消息而不换行。默认值:1024。自 PHP 7.3.0 起可用。


我在使用官方 Docker PHP 7.3 容器时遇到了这个问题,它专门覆盖了以下文件中的默认值Dockerfile

echo 'log_limit = 8192';
Run Code Online (Sandbox Code Playgroud)

它可以通过覆盖来修复,log_limit因此它属于 nginx 的 2048 限制:

[global]
log_limit = 1024
Run Code Online (Sandbox Code Playgroud)