Вопрос или проблема
У меня есть сервер Nextcloud на голом железе, размещённый на машине с Debian 12 и базой данных MariaDB. Когда я пытаюсь загрузить более крупные файлы размером более 100 МБ, “предполагаемое время загрузки” в браузере показывает “приостановлено”, и загрузка не происходит.
Сервер размещён локально в моём сетевом шкафу на модернизированном ПК Lenovo M700 маленького форм-фактора с 16 ГБ памяти и большим объёмом хранилища. Он подключён к маршрутизатору openWRT на TPLink-ER605, стоящему в студенческом общежитии, доступному через Tailscale. Доступ с открытого Интернета не допускается.
Я получаю следующее сообщение об ошибке в логах apache2:
"message":"Expected filesize of 104857600 bytes but read (from Nextcloud client) and wrote (to Nextcloud storage) 2809856 bytes. Could either be a network problem on the sending side or a problem writing to the storage on the server side.","exception":[],"CustomMessage":"Expected filesize of 104857600 bytes but read (from Nextcloud client) and wrote (to Nextcloud storage) 2809856 bytes. Could either be a network problem on the sending side or a problem writing to the storage on the server side."
Я предположил, что это связано с ограничениями на размер загружаемых файлов, поэтому попытался их увеличить.
В /etc/php/8.2/apache2/php.ini
я установил upload_max_filesize = 6G
, post_max_size = 6G
, memory_size = 6G
, max_execution_time = 3600
, max_input_time = 3600
;
В nextcloud.conf
Apache я добавил LimitRequestBody 6442450944
и Timeout до 3600;
В config.php
Nextcloud я установил
'upload_max_filesize' => 6442450944,
'post_max_size' => 6442450944,
перезагрузил все службы и, чтобы быть абсолютно уверенным, перезагрузил машину. Проблема осталась.
Либо это не была проблема, либо я сделал что-то не так.
Мне нужна помощь в диагностике проблемы или совет о том, почему это происходит. Загрузки в 100 МБ довольно малы, а мне нужно как минимум 5 ГБ.
Вот что говорит моя вкладка настроек в Nextcloud:
Версия: 8.2.26
Лимит памяти: 8 ГБ
Максимальное время выполнения: 3600
Максимальный размер загрузки: 6 ГБ
Частота повторной проверки OPcache: 2
Расширения: Core, date, libxml, openssl, pcre, zlib, filter, hash, json, random, Reflection, SPL, session, standard, sodium, apache2handler, mysqlnd, PDO, xml, bcmath, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, gmp, iconv, igbinary, imagick, intl, exif, mysqli, pdo_mysql, Phar, posix, readline, redis, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, Zend OPcache
Ответ или решение
Проблемы с загрузкой больших файлов в Nextcloud могут быть вызваны различными причинами, от ограничений настроек сервера до проблем с сетью или конфигурацией PHP и Apache. Рассмотрим каждый из возможных аспектов более детально и предложим решения.
Теория
Основной причиной остановки загрузки больших файлов в Nextcloud может быть неправильно настроенное окружение. Это может включать в себя ограничения на уровне PHP, Apache, или же проблемы с сетью, которые влияют на передачу данных. Зачастую такие проблемы могут быть связаны с недостаточностью ресурсов, тайм-аутами на сервере или ошибками конфигурации.
Пример
В вашем случае, вы уже внесли ряд изменений в конфигурации PHP и Apache:
-
PHP: Вы изменили
/etc/php/8.2/apache2/php.ini
, увеличив параметрыupload_max_filesize
,post_max_size
,memory_size
,max_execution_time
иmax_input_time
. Это верный шаг, так как эти настройки ограничивают максимальный размер файла, который может быть загружен через HTTP, и соответствующее время ожидания для выполнения скриптов. -
Apache: В
nextcloud.conf
вы добавилиLimitRequestBody
для ограничения размера тела запроса. Настройка Timeout также важна, поскольку она определяет, как долго сервер будет ожидать завершения операции. -
Nextcloud: В конфигурационном файле Nextcloud
config.php
были внесены изменения, аналогичные изменениям в PHP, что показывает понимание того, что Nextcloud также накладывает свои ограничения на загрузку файлов.
Применение
Несмотря на корректные действия, проблема остается. Это может указывать на несколько возможных причин:
-
Проблемы с сетью: Указанная ошибка в логах Apache говорит о том, что ожидаемый размер файла отличается от фактически записанного. Это может указывать на разрыв соединения или проблемы с сетью. Убедитесь, что соединение между клиентом и сервером стабильное. Проверьте настройки Tailscale, а также возможности вашего роутера OpenWRT и сетевого оборудования в студенческом общежитии.
-
Ограничения на уровне прокси или файрволла: Если у вас используются дополнительные уровни защиты, такие как обратный прокси или файрволл, они также могут ограничивать размер загружаемых данных. Убедитесь, что они не накладывают дополнительных ограничений сверху тех, которые вы уже установили.
-
Конфигурация Nginx или других веб-серверов: Если Apache используется совместно с другими серверами, убедитесь, что их настройки также соответствующим образом скорректированы.
-
Лимиты операционной системы: Проверьте настройки операционной системы, такие как ограничение по количеству открытых файловых дескрипторов или настройка ulimit. Убедитесь, что они допускают работу с большими файлами.
-
Журнал ошибок: Уделите внимание логам Nextcloud (например,
nextcloud.log
), которые могут содержать более конкретную информацию о происходящих ошибках. -
Перезапуск службы: После внесения изменений в конфигурационные файлы важно не только перезагрузить сервисы, но и убедиться, что все демоны работают и корректно обработали изменения.
Если все вышеперечисленные шаги не решили проблему, возможно дальнейшее изучение логов сервера и сетевых пакетов с помощью инструментов, таких как Wireshark или tcpdump, поможет в выявлении корневой причины.
Дополнительные рекомендации
Также рекомендуется:
- Использовать актуальные версии всех компонентов.
- Рассмотреть возможность временного увеличения уровня лога для получения более детальной информации о процессе загрузки.
- Провести стресс-тестирование сервера с различными размерами файлов, чтобы увидеть, где именно начинается сбой.
Соблюдение этих рекомендаций должно помочь в диагностике и решении проблемы с загрузкой больших файлов в Nextcloud, что обеспечит стабильную и надежную работу вашего сервиса.