输出生成后断开与 PHP 的连接

输出生成后断开与 PHP 的连接

我有一个 LEMP 堆栈。Nginx 位于 PHP-FPM 前面。由于某些网站很重,并且有 OPCode 缓存,因此 PHP 设置为只运行 5 个子进程。目标是每个子进程可以在不到半秒的时间内处理任何请求,然后转到下一个请求。

我发现的一个问题是,如果要发送大量的 HTML,而用户的连接速度较慢,那么 PHP 线程就会一直处于占用状态,直到下载完成为止。

由于我目前的设置,PHP 内部的超时时间非常严格,脚本会在 20 秒后被终止。这是为了确保每个人都有机会,但在连接速度较慢的情况下,这可能意味着用户会因 504 网关超时而被切断。

我想知道是否有某种缓冲解决方案可以在 Nginx 内部或之后实现,它会发送请求,然后...嗯...将内容缓冲到自己的缓存中,并在客户端可以下载时将其提供给客户端。目的是可以释放底层 PHP 线程。

我所要求的不一定是 PHP 特定的。任何处理 FastCGI 的东西,甚至任何 Nginx 上游的东西都可能存在类似的问题。

答案1

如果您使用 nginx 作为反向代理,那么它将处理您的慢速客户端。它将从后端接收结果,然后继续以客户端可以处理的速度向客户端传输数据。

一般来说,反向代理基本上是连接管理,避免后端长时间持有线程。

答案2

您是否考虑过使用 PHP 的输出缓冲?请参阅https://www.php.net/ob_start

相关内容