【问题标题】:Understanding NGINX's fastcgi_read_timeout了解 NGINX 的 fastcgi_read_timeout
【发布时间】:2020-03-11 12:32:04
【问题描述】:
我正在“微调”一个通过 NGINX 提供的 PHP Web 应用程序,其中 php-fpm 作为 FastCGI 服务器。
来自the documentation:
fastcgi_read_timeout
定义从 FastCGI 服务器读取响应的超时时间。
到目前为止一切顺利。但是后来……
仅在两次连续读取操作之间设置超时,而不是针对整个响应的传输。
PHP 脚本开始发送数据(nginx 读取)然后暂停(计算时间)然后发送更多数据(nginx 读取)。如果暂停时间超过指定时间,则断开连接。
这是正确的解释还是我遗漏了什么?
exaclty 是什么意思“在两次读取操作之间”?
“整体反应”持续时间不是很重要吗?什么参数为此设置了限制?
【问题讨论】:
标签:
nginx
timeout
fastcgi
【解决方案1】:
PHP 脚本开始发送数据(nginx 读取)然后暂停(计算时间)然后发送更多数据(nginx 读取)。如果暂停时间超过指定时间,则断开连接。
我认为这是一个正确的解释。
而且很容易测试:编写一个简单的 php 脚本,在 echos 和 flushes 之间添加一些 sleeps。 (目前我自己做不到)。
“整体反应”持续时间不重要吗?
就我个人而言,fastcgi_read_timeout 方法更有吸引力:
- 如果您的服务器处于固定超时的高负载下,它肯定会不时出现故障。用户会被激怒,他们会刷新...发送另一个请求...您的服务器会更加窒息,永远不会满足用户的任何请求。
- 但是,如果无论负载如何,您的服务器都显示它仍然处于活动状态并努力满足客户端的请求,那么由他们决定等待或中止。好多了!
什么参数为此设置了限制?
max_execution_time in php.ini 或
fastcgi_param PHP_VALUE "max_execution_time=1000";
在你的 NGINX 配置中