【发布时间】: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