Apache 2.4 + PHP 7.2 prefork mpm + загрузка файлов приводит к частичной ошибке загрузки через 20 секунд - PullRequest
2 голосов
/ 10 апреля 2019

Я заметил проблему с веб-приложением, из-за которого код нашего приложения, который обрабатывает загрузку файлов, периодически сталкивался с ошибкой загрузки файла 3. Я не был уверен, как наши пользователи вызывали эту ошибку, но я знаю, что те, кто это делал, будут загружать файлы через нестабильное или медленное интернет-соединение (мобильные точки доступа, общедоступный Wi-Fi и т. д.). Поэтому я проверил это, используя функцию регулирования Chrome Dev Tools (быстрый 3g) и загрузив файл размером 10 МБ, который может занять около минуты или более. Мы используем библиотеку Dropzonejs для обработки загрузок, кстати, без разбивки на части. Ровно через 22 - 23 секунды соединение всегда прерывается, но Apache продолжает обрабатывать неполное тело запроса и передает его в PHP, что приводит к частичной ошибке загрузки.

Я не могу понять, из-за чего это произошло. В конфигурации PHP для max_execution_time и max_input_time установлены значения 0 и -1 соответственно. Максимальные размеры записей и загрузки установлены относительно хорошо, размер загрузки файлов даже не имеет значения. Если запрос на загрузку занимает более 22–23 секунд, проблема возникает. Я попытался отключить mod_reqtimeout, и это не имело никакого значения. Другие вещи, которые я пробовал, - возиться со значением таймаута apache и отключить keepalive, и он по-прежнему вызывает проблемы чуть позже, чем через 20 секунд (это время появляется на вкладке сети браузера).

Я не вижу ничего в журналах ошибок apache, и журналы доступа делают эти запросы правдоподобными, поскольку apache продолжает обрабатывать неполный запрос, как обычно.

Сначала я подумал, что это может быть dropzonejs, убивающее соединение с запросом ajax, но я также протестировал тот же код в моей локальной среде разработки, в которой используется laradock (версии программного обеспечения будут немного отличаться. Все же и apache 2.4 и php 7.2), и я не могу повторить проблему, чтобы она не могла быть проблемой на стороне клиента.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

У нас была такая же проблема, и мы решили ее. Однако нет необходимости полностью отключать модуль. Проблема вызвана этой ошибкой в ​​Apache 2.4.39:

https://bz.apache.org/bugzilla/show_bug.cgi?id=63325

Как указано в отчете об ошибке, вы можете явно установить значение по умолчанию в конфигурационном файле Apache.

1 голос
/ 10 апреля 2019

Похоже, что mod_reqtimeout останавливал мои почтовые запросы.Я думаю, что мои изменения в apache не распространялись полностью, когда я сначала пытался отключить его (я полагаю, из-за того, что я использовал изящный перезапуск и включил keepalive).

...