fast-cgi中的php-fpm和nginx之间的连接是否持久(keep-alive)连接?

我试图编写一个服务器演示来连接php-fpm,但是我不知道fast-cgi的php-fpm和nginx之间的连接是否持久(keep-alive)连接? 每当http请求到nginx时,nginx会不会再通过tcp 3-Way Handshake连接php-fpm? 或者nginx和php-fpm之间的连接是保持连接的,nginx试图重用它?

PHP-FPM是fastCGI协议的一个实现,因此它遵守所有的fastCGI规范要求。

一个这样的要求是在规范的第3.5节 ,特别是关闭连接:

Web服务器控制传输连接的生存期。 当没有请求处于活动状态时,Web服务器可以关闭连接。 或者Web服务器可以将关闭权限委托给应用程序(请参阅FCGI_BEGIN_REQUEST)。 在这种情况下,应用程序在指定的请求结束时关闭连接。 这种灵活性适用于各种应用程序样式。 简单的应用程序将一次处理一个请求,并为每个请求接受一个新的传输连接。 更复杂的应用程序将通过一个或多个传输连接处理并发请求,并将长时间保持传输连接的打开状态。

一个简单的应用程序在写完响应之后,通过关闭传输连接来获得显着的性能提升。 Web服务器需要控制长连接的连接生存期。

当应用程序关闭连接或发现连接已关闭时,应用程序将启动新的连接。

这意味着由网络服务器决定连接是否会持续。 这是在nginx中通过fastcgi_keep_conn选项实现的,该选项指出:

默认情况下,FastCGI服务器将在发送响应后立即关闭连接。 但是,当这个指令被设置为值时,nginx将指示FastCGI服务器保持连接打开。 这对于保持FastCGI服务器正常运行的连接是非常必要的。

这个语句是为了反映规范的行为,以及web服务器的能力,它可以服务fastCGI生成的内容来修改默认的行为。

我在这里的假设是,由于Web服务器的线程不断循环使用,因此保持连接的活跃性并不存在。 也许有一个指定数量的暂停线程,但是线程池的通常策略是杀死最近最少使用的线程,通常这意味着产生一个新的线程将确保预先退出的线程被杀死。

无可否认,我没有找到资源来支持nginx的池收集策略是LRU的说法,但它不是不太可能,并且在这种情况下保持连接活着并不会节省太多。