Przesyłanie danych do Nextcloud, które kończy się na 2 GB, jest zazwyczaj ograniczone przez jedną warstwę ścieżki żądania, a nie przez pojedyncze, uniwersalne ustawienie Nextcloud. Aby akceptować większe pliki, należy ustawić wartość docelową powyżej rozmiaru pliku na każdej warstwie obsługującej przesyłanie: PHP, serwerze WWW oraz dowolnym odwrotnym serwerze proxy lub panelu hostingowym. Następnie należy sprawdzić, czy pamięć masowa, przestrzeń tymczasowa i limity czasu żądań umożliwiają transfer.
W tym przewodniku użyto docelowego rozmiaru 5 GB jako przykładu dla plików o rozmiarze do około 4 GB. Wybierz limit odpowiadający Twojemu rzeczywistemu przypadkowi użycia, zostaw margines na obciążenie żądaniami, jeśli to możliwe, i zachowaj spójność ustawień w całym stosie. Przykłady dotyczą samodzielnie zarządzanego serwera Nextcloud z wykorzystaniem PHP; zarządzany hosting, kontenery i urządzenia mogą udostępniać różne ścieżki konfiguracji.
Dlaczego przesłanie 2 GB może się nie powieść
Aktualny podręcznik administracyjny Nextcloud wyjaśnia, że przesyłanie dużych plików może być ograniczone przez konfigurację PHP i serwera WWW. W przypadku przesyłania fragmentarycznego, przeglądarka lub klient wysyła fragmenty, które Nextcloud asembluje; niektóre dyrektywy PHP dotyczące rozmiaru pliku mogą nie regulować tych żądań, podczas gdy limity czasu serwera WWW lub PHP nadal tak. Serwer proxy, zapora sieciowa, zaplecze pamięci masowej, limit użytkownika lub pełny dysk tymczasowy mogą narzucać kolejne ograniczenia. Zapoznaj się z podręcznikiem administracyjnym Nextcloud dotyczącym przesyłania dużych plików oraz podręcznikiem użytkownika Nextcloud dotyczącym przesyłania dużych plików .
„2 GB” może również oznaczać 2 000 000 000 bajtów lub 2 GiB (2 147 483 648 bajtów). Wyświetlany limit i rzeczywisty próg bajtów mogą się nie zgadzać. Zapisz błąd, rozmiar pliku w bajtach oraz informację, czy awaria wystąpiła natychmiast, czy po rozpoczęciu przetwarzania. Te dane pomogą Ci zidentyfikować warstwę, którą należy sprawdzić.
1. Zidentyfikuj pierwszą warstwę, która odrzuca przesyłanie
Przed zmianą ustawień zwróć uwagę na sposób przesyłania pliku: interfejs internetowy NextCloud, klient synchronizacji na komputerze lub urządzeniu mobilnym, czy aplikacja WebDAV. Przetestuj plik nieco większy od poprzedniego progu, ale nie przesyłaj wielokrotnie plików o rozmiarze wielu gigabajtów podczas rozwiązywania problemów. Sprawdź przegląd i dziennik administracyjny NextCloud, dziennik błędów serwera WWW, dzienniki PHP-FPM lub Apache oraz dowolny panel proxy lub hostingu w momencie awarii.
- Natychmiastowa odpowiedź HTTP 413 często wskazuje na ograniczenie serwera WWW lub serwera proxy dotyczące treści żądania.
- Ostrzeżenie PHP o przekroczeniu dozwolonego rozmiaru pliku wskazuje na ustawienia przesyłania PHP dla konwencjonalnego żądania multipart.
- Transfer, który się rozpoczyna, ale zatrzymuje się lub przekracza limit czasu, wskazuje na przekroczenie limitu czasu żądania, przerwanie połączenia lub obciążenie zasobów.
- Jasny komunikat o kwocie oznacza, że przeszkodą jest dostępna przestrzeń dyskowa Nextcloud użytkownika, a nie limit przesyłania danych na serwer.
To tylko wskazówki, a nie ostateczne diagnozy: serwer proxy może zastąpić błąd aplikacji, a logi różnią się w zależności od wdrożenia. Przed edycją konfiguracji należy porównać znaczniki czasu między warstwami.
2. Ustaw limity PHP dla przesyłania formularzy przeglądarki
Znajdź konfigurację PHP używaną przez proces Nextcloud skierowany do sieci. W systemach Debian i Ubuntu typowy plik PHP-FPM znajduje się w katalogu /etc/php/<version>/fpm/php.ini; serwer Apache z modułem mod_php zazwyczaj używa osobnego pliku apache2/php.ini. Konfiguracja wiersza poleceń PHP może być inna, więc edycja pliku zgłoszonego przez php --inimoduł może nie spowodować zmiany w witrynie. Wskazówki dotyczące konfiguracji PHP w Nextcloud opisują kontekst konfiguracji po stronie serwera.
W przypadku limitu 5 GB należy sprawdzić następujące ustawienia w aktywnej konfiguracji PHP witryny:
upload_max_filesize = 5G
post_max_size = 5G
max_input_time = 3600
max_execution_time = 3600
post_max_sizePowinien być co najmniej tak duży jak upload_max_filesize; ustawienie obu na ten sam cel to praktyczny punkt wyjścia dla przesyłania pojedynczego pliku w wielu częściach. Powyższe wartości czasu są przykładowe i nie gwarantują zakończenia przesyłania: wybierz czas trwania odpowiadający dostępnej przepustowości i polityce operacyjnej. Nie zwiększaj rozmiaru pliku PHP memory_limitdo 5 GB tylko dlatego, że plik ma 5 GB. Dokumenty PHP max_input_timeuwzględniają czas spędzony na odbieraniu danych wejściowych i to, że zachowanie przesyłania zależy od powiązanych dyrektyw; zapoznaj się z dokumentacją dotyczącą pułapek przesyłania w PHP .
3. Podnieś limit żądań serwera WWW
Nginx z PHP-FPM
W aktywnym bloku serwera Nginx dla Nextcloud ustaw limit treści żądania powyżej największego pliku, który zamierzasz zaakceptować. Dla przykładu 5 GB:
client_max_body_size 5G;
Umieść go w odpowiednim kontekście http, server, lub location, unikając konfliktu niższej wartości w bardziej szczegółowym bloku. Nginx dokumentuje tę dyrektywę w swoim głównym module referencyjnym . Przykład instalacji Nginx w NextCloud zawiera również ustawienia rozmiaru i limitu czasu przesyłania. Sprawdź poprawność konfiguracji za pomocą sudo nginx -tprzed ponownym załadowaniem Nginx.
Apacz
Sprawdź, czy aktywny host wirtualny, konfiguracja katalogu lub dołączone zestawy konfiguracyjne są włączone LimitRequestBody. W wersjach Apache, w których domyślny lub jawny limit jest niższy niż docelowy, zwiększ go do wymaganej liczby bajtów lub 0nie używaj limitu na poziomie Apache, tylko jeśli jest to akceptowalne dla danego wdrożenia. Upewnij się, że dyrektywa jest umieszczona w kontekście dozwolonym przez wersję i konfigurację Apache. Apache opisuje jej działanie w dokumentacji LimitRequestBody . Uruchom apachectl configtestprzed ponownym załadowaniem usługi.
4. Sprawdź serwery proxy odwrotne, kontenery i pamięć masową
Jeśli ruch przechodzi przez inną instancję Nginx, moduł równoważenia obciążenia, panel sterowania hostingiem lub serwer proxy zabezpieczeń, jego limity rozmiaru i limitu czasu muszą również zezwalać na przesyłanie. Żądanie może zostać odrzucone, zanim dotrze do NextCloud. Zaktualizuj tylko warstwę, która jest właścicielem tego ustawienia, a następnie sprawdź jej logi i kod odpowiedzi. W przypadku wdrożenia Dockera lub innego kontenera zmień konfigurację zamontowaną w działającym kontenerze lub obsługiwane ustawienia środowiska dla tego obrazu; plik PHP hosta może w ogóle nie być używany przez kontener.
Duże przesyłanie danych również zużywa zasoby. Upewnij się, że wolumin danych Nextcloud ma wystarczającą ilość wolnego miejsca i że katalog tymczasowy PHP lub serwera WWW jest w stanie obsłużyć obciążenie. W przypadku przesyłania fragmentów, przestrzeń tymczasowa może być potrzebna podczas składania fragmentów; wdrożenia pamięci masowej obiektów mogą wymagać dodatkowego dysku tymczasowego. Zaplanuj jednoczesne przesyłanie, a nie tylko jednego pliku o maksymalnym rozmiarze. Przed zwiększeniem limitu w obciążonej instalacji zapoznaj się z sekcją Nextcloud dotyczącą przestrzeni tymczasowej i przesyłania dużych plików .
5. Zastosuj zmiany i zweryfikuj je za pomocą testu kontrolowanego
Po pomyślnym sprawdzeniu konfiguracji, przeładuj lub uruchom ponownie odpowiednie usługi PHP-FPM i serwera WWW, aby mogły odczytać zaktualizowane ustawienia. Dokładne nazwy usług różnią się w zależności od dystrybucji i wersji PHP. Unikaj restartowania niepowiązanych usług produkcyjnych. Następnie prześlij plik o rozmiarze nieznacznie przekraczającym poprzedni limit 2 GB – na przykład znany plik testowy o rozmiarze około 2,1 GB – używając tego samego klienta i trasy, która pierwotnie nie powiodła się. Utrzymuj test poniżej nowego limitu i monitoruj ilość wolnego miejsca na dysku, logi i postęp transferu.
Pomyślny test powinien zakończyć się bez błędu rozmiaru HTTP lub przekroczenia limitu czasu, pojawić się w docelowym folderze Nextcloud i mieć wiarygodny rozmiar pliku po sprawdzeniu z poziomu klienta. W przypadku ważnego pliku należy porównać sumę kontrolną w źródle i miejscu docelowym, jeśli przepływ pracy to obsługuje. Sam pasek postępu sięgający 100% nie potwierdza, że zapisany plik jest kompletny.
Kiedy ta poprawka nie wystarczy
- Przesyłanie przez internet działa, ale klient stacjonarny nie działa: sprawdź zachowanie klienta, serwera proxy i limitu czasu serwera. Klienci NextCloud korzystają z przesyłania fragmentarycznego, więc
upload_max_filesizesama zmiana kodu PHP może nie rozwiązać problemu z żądaniem fragmentu lub limitem czasu asemblera końcowego.
- Błąd informuje, że użytkownikowi zabrakło miejsca. Dostosuj limit przestrzeni dyskowej Nextcloud tego użytkownika lub jego wolną przestrzeń; zwiększenie limitu żądań nie spowoduje utworzenia wolnej przestrzeni.
- Awaria występuje przy takiej samej liczbie bajtów dla każdego klienta: poszukaj limitu współdzielonego serwera proxy, zapory WAF, dostawcy hostingu lub serwera WWW i porównaj jego logi z żądaniem.
- Przesyłanie danych zostało ukończone, ale dane zajmują zbyt dużo miejsca na dysku tymczasowym: zmniejsz liczbę jednoczesnych przesyłań, zapewnij odpowiednią ilość miejsca na dysku tymczasowym lub przejrzyj udokumentowane zachowanie funkcji dzielenia na fragmenty i przechowywania danych w zapleczu.
Podniesienie limitu przesyłania zwiększa ilość danych, które użytkownicy mogą wysyłać na serwer, dlatego powinno być powiązane z limitami, monitorowaniem, wystarczającą ilością miejsca na dane i rozsądną kontrolą dostępu. Nie ma uniwersalnego, bezpiecznego maksimum: praktyczny pułap zależy od najwolniejszego limitu na ścieżce żądania oraz pojemności serwera i systemu pamięci masowej.
Odniesienia