【问题标题】:Cloud run fails to serve complete file - client_disconnected_after_partial_response云运行无法提供完整文件 - client_disconnected_after_partial_response
【发布时间】:2022-01-03 15:51:54
【问题描述】:

我们在 GCP Cloud run 中运行的 PHP 应用程序存在问题。

环境:docker 中的 PHP 8 (nginx php-fpm) - 官方镜像“php:8.1-fpm”。

当客户端在我们的系统中打开页面时,某些文件无法发送给客户端。我在 docker 中无法在本地重现相同的行为(完全相同的图像),所以我猜这是 Cloud run 特定的。

该文件由该 PHP 代码提供服务:

...
    header('Last-Modified: ' . $lmstring);
    header('Content-Lenght: ' . filesize($filename));
    readfile($filename);
    die;
}

从云端运行收到此警告:

“截断响应正文。通常意味着请求超时或应用程序在响应完成之前退出。”

来自 Google HTTPS 负载平衡器的信息日志(错误代码解释 here):

statusDetails:“client_disconnected_after_partial_response”

真实的例子和我已经发现的一些事实: 在内部系统中打开页面 X。此页面下载 Y 其他文件 - 这些 Y 文件 (css+js) 中的大多数都已成功发送,但有些被截断为 ~3641 个字符。所有发送不完整的文件通常都被截断为相同的长度(很少少一点)。它总是被截断相同的文件,我没有发现它们有任何共同点。有时是js文件,有时是css文件。响应代码为 HTTP 200。

我在 PHP 错误输出中没有发现任何错误 - 尝试在所有级别上打开错误。在其他情况下,我们通常会从 PHP 中得到错误,所以我不希望任何东西被静音。

有人知道为什么会发生这种情况以及如何处理吗?

【问题讨论】:

    标签: php google-cloud-platform fastcgi google-cloud-run fpm


    【解决方案1】:

    似乎我找到了解决方案。以下线程中的答案有所帮助: Google Cloud Run website timeouts when content length is between 4013-8092 characters. What is going on?

    尝试解释上述线程中的行为。

    在 nginx 中关闭 fastcgi 缓冲有助于解决问题: fastcgi_buffering off; (nginx.conf)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2022-11-15
      • 2019-08-15
      相关资源
      最近更新 更多