Google Cloud 运行 内容长度在 4013-8092 个字符之间时网站超时。到底是怎么回事?
Google Cloud Run website timeouts when content length is between 4013-8092 characters. What is going on?
此问题发生在由 Nginx 和 PHP-FPM 提供的纯 PHP 文件上。我在使用 Symfony 开发我的网站时偶然发现了这个问题,但有问题的内容长度范围是 3702-15965(我想知道为什么它与 vanilla PHP 不同)。
到目前为止我尝试过的:
- 超时持续时间为 15 秒,但我已尝试将其增加到 300 秒,但仍然超时。所以我猜这是无限循环的事情。
- 它看起来不像是资源相关的,因为即使内容长度为 500 万个字符,它也能正常工作。
- 用不同的字符创建了各种测试,看看我是否可以改变有问题的内容长度范围。答案是否定的,我所有测试的范围都保持不变。
- 我试过禁用 gzip。它没有改变长度范围,但响应改变了。 Gzip 启用响应:“上游请求超时” | Gzip 禁用响应:完全空白
备注:
- 我的本地主机上不存在这个问题。
- 很少能正常打开页面。我无法始终如一地重现这一点。
- 除了“请求超时”行之外,Nginx、PHP 或 GCR 日志中没有错误。
感谢任何帮助。谢谢
有趣的是,我在写问题的同时解决了问题。将 fastcgi_buffering off;
添加到 Nginx 配置可解决此问题。
但我仍然不明白问题出在哪里以及为什么禁用缓冲可以解决问题。因此,如果有人可以解释它,我不介意将该答案标记为解决方案。
这是特定于 nginx 而不是 Cloud 运行。当 nginx 开始接收来自 FastGCI 后端的响应时,它将在内存中缓冲 header 响应。如果响应对于内存而言太大,可以将其中一部分保存到磁盘上的临时文件中,该临时文件由其他变量控制,如 here 所述。通过禁用 fastcgi_buffering,响应在收到时同步传递给客户端。您可以在这些文章中找到更多信息[1][2][3]
[1] upstream sent too big header while reading response header from upstream
[2] Nginx upstream sent too big header while reading response header from upstream
[3]https://gist.github.com/magnetikonline/11312172#determine-fastcgi-response-sizes
此问题发生在由 Nginx 和 PHP-FPM 提供的纯 PHP 文件上。我在使用 Symfony 开发我的网站时偶然发现了这个问题,但有问题的内容长度范围是 3702-15965(我想知道为什么它与 vanilla PHP 不同)。
到目前为止我尝试过的:
- 超时持续时间为 15 秒,但我已尝试将其增加到 300 秒,但仍然超时。所以我猜这是无限循环的事情。
- 它看起来不像是资源相关的,因为即使内容长度为 500 万个字符,它也能正常工作。
- 用不同的字符创建了各种测试,看看我是否可以改变有问题的内容长度范围。答案是否定的,我所有测试的范围都保持不变。
- 我试过禁用 gzip。它没有改变长度范围,但响应改变了。 Gzip 启用响应:“上游请求超时” | Gzip 禁用响应:完全空白
备注:
- 我的本地主机上不存在这个问题。
- 很少能正常打开页面。我无法始终如一地重现这一点。
- 除了“请求超时”行之外,Nginx、PHP 或 GCR 日志中没有错误。
感谢任何帮助。谢谢
有趣的是,我在写问题的同时解决了问题。将 fastcgi_buffering off;
添加到 Nginx 配置可解决此问题。
但我仍然不明白问题出在哪里以及为什么禁用缓冲可以解决问题。因此,如果有人可以解释它,我不介意将该答案标记为解决方案。
这是特定于 nginx 而不是 Cloud 运行。当 nginx 开始接收来自 FastGCI 后端的响应时,它将在内存中缓冲 header 响应。如果响应对于内存而言太大,可以将其中一部分保存到磁盘上的临时文件中,该临时文件由其他变量控制,如 here 所述。通过禁用 fastcgi_buffering,响应在收到时同步传递给客户端。您可以在这些文章中找到更多信息[1][2][3]
[1] upstream sent too big header while reading response header from upstream
[2] Nginx upstream sent too big header while reading response header from upstream
[3]https://gist.github.com/magnetikonline/11312172#determine-fastcgi-response-sizes