当内容长度在 4013-8092 个字符之间时,Google Cloud Run 网站会超时

此问题发生在 Nginx 和 PHP-FPM 提供的纯 PHP 文件上。我在使用 Symfony 开发网站时偶然发现了这个问题,但有问题的内容长度范围是 3702-15965 (我想知道为什么它与普通 PHP 不同)。

到目前为止我尝试过的:

  • 超时持续时间为 15 秒,但我尝试将其增加到 300 秒,但仍然超时。所以我猜这是无限循环的事情。

  • 它看起来与资源无关,因为即使内容长度为 500 万个字符它也能工作。

  • 使用不同的字符创建了各种测试,看看是否可以更改有问题的内容长度范围。答案是否定的,我所有的测试范围都保持不变。

  • 我尝试过禁用 gzip。它没有改变长度范围,但响应发生了变化。Gzip 启用响应:“上游请求超时” | Gzip 禁用响应:完全空白

笔记:

  • 我的本地主机上不存在此问题。

  • 很少能正常打开页面。我无法一致地重现这一点。

  • 除了“请求超时”行之外,Nginx、PHP 或 GCR 日志中没有任何错误。

任何帮助表示赞赏。谢谢。


偶然的你
浏览 65回答 2
2回答

跃然一笑

有趣的是,我在写问题时已经解决了这个问题。添加fastcgi_buffering off;到 Nginx 配置修复了该问题。但我仍然不明白问题是什么以及为什么禁用缓冲可以修复它。因此,如果有人可以解释它,我不介意将该答案标记为解决方案。

慕侠2389804

这是特定于 Nginx 而不是 Cloud Run 的。当 Nginx 开始接收来自 FastGCI 后端的响应时,它将在内存中缓冲标头响应。如果响应对于内存来说太大,则可以将其中一部分保存到磁盘上的临时文件中,该临时文件由其他变量控制。通过禁用 fastcgi_buffering,响应将在接收时同步传递到客户端。
打开App,查看更多内容
随时随地看视频慕课网APP