![NGINX:对静态内容的保持活动请求正常 - 对 php-fpm 请求的保持活动请求挂起,直到达到 keepalive_timeout](https://linux22.com/image/595929/NGINX%EF%BC%9A%E5%AF%B9%E9%9D%99%E6%80%81%E5%86%85%E5%AE%B9%E7%9A%84%E4%BF%9D%E6%8C%81%E6%B4%BB%E5%8A%A8%E8%AF%B7%E6%B1%82%E6%AD%A3%E5%B8%B8%20-%20%E5%AF%B9%20php-fpm%20%E8%AF%B7%E6%B1%82%E7%9A%84%E4%BF%9D%E6%8C%81%E6%B4%BB%E5%8A%A8%E8%AF%B7%E6%B1%82%E6%8C%82%E8%B5%B7%EF%BC%8C%E7%9B%B4%E5%88%B0%E8%BE%BE%E5%88%B0%20keepalive_timeout.png)
仅供参考,我发布的初始问题在这里,无需阅读,因为我最初就偏离了主题:
我能够追踪它以维持生命。
请记住,当我在这个问题中谈到保持活动时,我的意思是用户<-> 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 或更高版本