NGINX:对静态内容的保持活动请求正常 - 对 php-fpm 请求的保持活动请求挂起,直到达到 keepalive_timeout

NGINX:对静态内容的保持活动请求正常 - 对 php-fpm 请求的保持活动请求挂起,直到达到 keepalive_timeout

仅供参考,我发布的初始问题在这里,无需阅读,因为我最初就偏离了主题:

https://serverfault.com/questions/427296/nginx-php-fpm-strange-issue-when-trying-to-display-images-via-php-gd-readf

我能够追踪它以维持生命。

请记住,当我在这个问题中谈到保持活动时,我的意思是用户<-> NGINX 保持活动。不是NGINX <-> BACKEND(本例中为 php-fpm)。

场景三是问题场景,我只包括一和二,以明确我已经完成了所有必需的测试。

因此,具体发生的情况如下:

场景一 [ 启用 keep alive ]:

A)对静态内容的请求[非基于 fastcgi 的请求,简单的文件系统访问]

B)Keep alive 是

C) 内容发送始终没有问题

场景二 [ 禁用 keep alive ]:

A)请求基于 php-fpm 的动态内容

B)Keep alive 是离开

C) 内容发送始终没有问题

场景三 [ 启用 keep alives ]:

A)请求基于 php-fpm 的动态内容

B)Keep alive 是

C) 内容已发送,但浏览器将处于“加载状态”,直到达到 keepalive_timeout。此状态在不同的浏览器上看起来不同。例如,chrome 将显示内容,但会在顶部浏览器上“旋转”。达到 keepalive_timeout 后,旋转停止,请求在调试器中显示为红色,即使内容实际上显示正常。在 IE 中,页面保持空白,直到达到保持活动超时,然后内容才会显示。查看 IE 开发人员工具,可以看到内容以“蓝色”显示“keepalive_timeout”秒,在 IE 开发人员工具中,这表示“正在接收”。

完全被难住了,尝试将配置恢复到最基本的形式,但这种情况仍然发生。

总而言之,在启用保持活动的情况下提供基于 php-fpm 的结果时,似乎存在某种与网络相关的问题(tcp/ip 堆栈?)。

有任何想法吗?

答案1

这里可能有一两件事出了问题。

https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_keep_conn

syntax:     fastcgi_keep_conn on | off;
default:    

fastcgi_keep_conn off;

context:    http, server, location

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

或者

https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

upstream default {
  server 10.0.0.1:80;
  keepalive 1024 single;
}

为上游启用保持连接。

Num 指定之前保持打开的最大连接数,如果达到最大值,它将关闭最近最少使用的连接。

Single 将所有内容视为单个主机。使用此标志,与不同后端的连接将被视为平等。

两者均适用于 Nginx 1.1.4 或更高版本

相关内容