Загрузка файла PHP с помощью mod-xsendfile не загружает весь файл

У меня проблемы с загрузками с нашего веб-сайта. Большие файлы просто не будут загружаться полностью. Загрузка остановится где-то посередине... Пример этот файл (размер около 172 МБ) не будет t скачать в полном размере (есть и другие файлы).

Я переключился со скрипта загрузки, полностью основанного на PHP, который включен в структуру Kohana:

return download::force($filePath);

к решению mod-xsendfile. Я читал о возможных проблемах со сценариями загрузки на основе PHP, а большой файл и камера поверх mod-xsendfile - правильное решение ... Что ж, похоже, нет, я получаю тот же результат с обоими методами. Моя текущая реализация загрузки с использованием заголовков mod-xsendfile выглядит следующим образом:

header("X-Sendfile: $filePath");
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');

Что я делаю не так?

ОБНОВИТЬ:

Я использовал этот HTTP-сниффер для проверки заголовков ответа, и это результат, если он помогает решить эту проблему.

Status: HTTP/1.1 200 OK
Server: Apache  
Set-Cookie: dewesoftsession=63ms5j67kc231pr4bpm8cmg1f7; expires=Sat, 30-Mar-2013 11:36:59 GMT; path=/   
Expires: Thu, 19 Nov 1981 08:52:00 GMT  
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0   
Pragma: no-cache    
Set-Cookie: dewesoftsession=63ms5j67kc231pr4bpm8cmg1f7; expires=Sat, 30-Mar-2013 11:36:59 GMT; path=/   
Content-Disposition: attachment; filename="DEWESoft_FULL_7_0_5.exe" 
Last-Modified: Mon, 24 Sep 2012 12:50:12 GMT    
ETag: "25814de-ac291e9-4ca7207c7fcd9"   
Content-Type: application/octet-stream  
Content-Length: 180523497   
Date: Sat, 30 Mar 2013 09:37:01 GMT 
X-Varnish: 294312007    
Age: 2  
Via: 1.1 varnish    
Connection: close   
X-Varnish-Cache: MISS

person Primoz Rome    schedule 29.03.2013    source источник
comment
Какие заголовки ответа вы получаете от сервера?   -  person Ja͢ck    schedule 29.03.2013
comment
Как я могу это проверить?   -  person Primoz Rome    schedule 29.03.2013
comment
Используя инструменты разработчика вашего браузера; на вкладке сети.   -  person Ja͢ck    schedule 29.03.2013
comment
Я ничего не вижу, попробуйте сами. Я дал ссылку на файл выше, который запускает скрипт загрузки: dewesoft. com/download?file=DEWESoft_FULL_7_0_5.exe   -  person Primoz Rome    schedule 29.03.2013
comment
@Jack Я обновил свой вопрос с заголовками ответов   -  person Primoz Rome    schedule 30.03.2013
comment
Эти заголовки выглядят нормально на самом деле. Может, это Варниш?   -  person Ja͢ck    schedule 30.03.2013
comment
Я понятия не имею, что такое Varnish? У нас есть управляемый сервер, поэтому я просто обрабатываю файлы веб-сайта...   -  person Primoz Rome    schedule 30.03.2013
comment
@Jack Я поговорил с системными парнями @ моего хостинг-провайдера, и мы исключили мой скрипт загрузки из Varnish, проблема, которую вы предложили. К сожалению это не помогло и проблема осталась. Apache и Varnish были перезапущены после обновления конфигурации Varnish... Теперь мои идеи заканчиваются :-(.   -  person Primoz Rome    schedule 02.04.2013
comment
Хм, интересно, если добавить header('Cache: private'); здесь может помочь. В противном случае заголовки выглядят нормально. Журналы Apache ничего не показывают, не так ли?   -  person Ja͢ck    schedule 03.04.2013
comment
@Jack попытался добавить предложенный вами заголовок (я добавил его до header("X-Sendfile: $filePath");) -> тот же результат. Журналы Apache пусты...   -  person Primoz Rome    schedule 03.04.2013
comment
@Jack только что понял, что у большинства пользователей это работает нормально, но у меня загрузка прервалась. Возможно ли, что ошибка только на моей стороне? Какой-то тайм-аут что ли. Я пробовал разные браузеры, wget и curl, и загрузка всегда прерывалась до того, как весь файл упал ... Я не знаю, что у меня закончились идеи. Я могу скачивать файлы большего размера с других сайтов :S!   -  person Primoz Rome    schedule 05.04.2013
comment
Хотел бы я рассказать вам, что это такое, но это начинает выглядеть так, будто ваш интернет-провайдер или компьютер издеваются над вами :)   -  person Ja͢ck    schedule 05.04.2013
comment
@Jack только что выяснил, что у Varnish есть параметр запуска с именем send_timeout, который по умолчанию установлен на 600 с. Это привело к тайм-ауту.   -  person Primoz Rome    schedule 05.04.2013


Ответы (1)


Через пару дней нам удалось найти причину проблемы. Varnish имеет начальный параметр send_timeout, который по умолчанию установлен на 600 секунд. При загрузке больших файлов вы можете столкнуться с этим тайм-аутом, что приведет к прерыванию загрузки.

Таким образом, увеличение параметра Varnish send_timeout поможет вам решить эту проблему.

person Primoz Rome    schedule 05.04.2013