Загрузка завершается ошибкой после того, как все данные загружены на nginx + php-fpm.
Я контролирую загрузку zip-файлов (примерно 100 МБ каждый) с помощью сценария PHP, который передает файл прямо клиенту. Я использую php-fpm под Ubuntu 14.04 с nginx. Иногда загрузка проходит успешно, но обычно после потоковой передачи всех данных происходит сбой.
Загрузка продолжается до конца в клиентских браузерах Chrome и Firefox, но затем она зависает и не работает. Иногда у zip-файла просто неправильное имя «foo.zip.crdownload», а иногда он поврежден. Что я могу сделать, чтобы отладить это?
(Изменить: в журналах ничего не отображалось, но, в конце концов, произошла ошибка загрузки с «тайм-аутом восходящего потока (110: тайм-аут соединения) при чтении заголовка ответа от восходящего, клиента»)
Я прохожу через CloudFlare CDN / Proxy, но до сегодняшнего дня сайт работал через Apache 2. Я отключил кеширование для URL, с которого загружаюсь. Я также попытался изменить тип mime с «application / octet-stream» на «application / zip», но он все равно периодически терпит неудачу.
Вроде отчасти тайм-аут. Эта ссылка tekovic помогла: В основном вам нужно установить fastcgi_read_timeout значение в разделе содержимого на разумное количество секунд, разрешенное до начала загрузки (по умолчанию 60 секунд).
location ~* \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_read_timeout 120;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
В соответствии с то nginx вики
"Директива устанавливает время, в течение которого восходящий поток ожидает, пока процесс fastcgi отправит данные. Измените эту директиву, если у вас есть длительные процессы fastcgi, которые не производят вывод, пока они не завершили обработку. Если вы видите ошибку тайм-аута восходящего потока в журнал ошибок, затем увеличьте этот параметр до более подходящего ".
Далее я настроил CloudFlare чтобы не кэшировать конкретный каталог, из которого происходит загрузка, и не оставлять его «Всегда включенным» - шаблон правила страницы должен быть таким
*mywebsite.com/downloads/*