nginx - 了解 NGINX 的 fastcgi_read_timeout
问题描述
我正在“微调”一个通过 NGINX 提供的 PHP Web 应用程序,其中 php-fpm 作为 FastCGI 服务器。
从文档中:
fastcgi_read_timeout
定义从 FastCGI 服务器读取响应的超时时间。
到目前为止,一切都很好。但是之后...
超时仅在两个连续的读取操作之间设置,而不是为整个响应的传输设置。
PHP 脚本开始发送数据(nginx 读取)然后暂停(计算时间)然后发送更多数据(nginx 读取)。如果暂停持续时间超过指定时间,则断开连接。
这是正确的解释还是我遗漏了什么?
exaclty 是什么意思“两个读取操作之间”?
“整体反应”的持续时间不是很重要吗?什么参数为此设置了限制?
解决方案
PHP 脚本开始发送数据(nginx 读取)然后暂停(计算时间)然后发送更多数据(nginx 读取)。如果暂停持续时间超过指定时间,则断开连接。
我认为这是一个正确的解释。
而且很容易测试:编写一个简单的 php 脚本,在s 和essleep
之间添加一些 s 。(目前不能自己做)。echo
flush
“整体反应”的持续时间不是很重要吗?
就我个人而言,这种fastcgi_read_timeout
方法更有吸引力:
- 如果您的服务器处于固定超时的高负载下,它肯定会不时出现故障。用户会被激怒,他们会刷新......发送另一个请求......你的服务器会更加窒息,永远不会满足用户的任何请求。
- 但是,如果无论负载如何,您的服务器都显示它仍然处于活动状态并努力满足客户端的请求,那么由他们决定等待或中止。好多了!
什么参数为此设置了限制?
max_execution_time
在php.ini
或
fastcgi_param PHP_VALUE "max_execution_time=1000";
在你的 NGINX 配置中
推荐阅读
- apache-spark - Spark - 日期与时间戳比较 - 无意义的结果“2018-01-01”少于“2018-01-01 00:00:00”
- node.js - Express Validator - 如何处理条件验证
- java - Red Hat Developer Studio 12 中的 JDBC 驱动程序模板
- c++ - 如何捕捉函数调用
- python - Python Numpy Array 为每个索引返回多个值,但不允许对这些值进行索引
- php - 为什么不使用 Composer 安装就不能使用 PHP Carbon 库?
- aws-lambda - Lambda 在停机后恢复
- ocaml - OCAML:嵌套递归
- grails - 试图从不是来自域对象的数据中呈现 gsp HTML 响应
- angular - 如何在 Angular 6 中使用 i18n-iso-countries