Назад | Перейти на главную страницу

Как отлаживать сбои при загрузке nginx + php-fpm?

Загрузка завершается ошибкой после того, как все данные загружены на 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/*