Понимание NGINX fastcgi_read_timeout - PullRequest
0 голосов
/ 11 марта 2020

Я "тонко настраиваю" веб-приложение PHP, подаваемое через NGINX с php -fpm в качестве сервера FastCGI.

С документация :

fastcgi_read_timeout

Определяет время ожидания чтения ответа от сервера FastCGI.

пока все хорошо. Но тогда ...

Тайм-аут устанавливается только между двумя последовательными операциями чтения, а не для передачи всего ответа.

PHP скрипт начинает отправку данных (nginx чтения), затем делает паузу (время вычислений), а затем отправляет больше данных (nginx чтения). Если пауза длится дольше указанного времени, соединение разрывается.

Это правильная интерпретация или я что-то упустил?

Что означает exaclty " между двумя операции чтения"?

Разве длительность" всего ответа "не имеет значения? А какой параметр устанавливает для этого ограничение?

1 Ответ

0 голосов
/ 16 марта 2020

Сценарий PHP начинает отправку данных (чтение * 1035), затем приостанавливает (вычисляет время), а затем отправляет дополнительные данные (чтение nginx). Если пауза длится дольше указанного времени, соединение разрывается.

Я думаю, что это правильная интерпретация.
И это легко проверить: напишите простой php -скрипт с некоторыми sleep с между echo с и flush с. (Не могу сделать это сам в данный момент).

Разве длительность "всего ответа" не имеет значения?

Лично для меня, fastcgi_read_timeout подход более привлекательный:

  • Если ваш сервер находится под высокой нагрузкой с фиксированным тайм-аутом, он будет время от времени терпеть неудачу. Пользователи будут раздражены, они будут переадресовывать sh ... отправлять еще один запрос ... И ваш сервер задыхается еще больше, никогда не выполняя ни одного из запросов пользователя.
  • Но если, независимо от нагрузки, вы сервер показывает, что он все еще жив и изо всех сил старается выполнить запросы клиента, а затем им решать, ждать или прервать работу. Гораздо лучше!

И какой параметр устанавливает ограничение для этого?

max_execution_time в php.ini или

fastcgi_param PHP_VALUE "max_execution_time=1000";

в вашем NGINX конфиге

...