„413 Request Entity Too Large” w Nginx z ustawionym „client_max_body_size”


54

Przesyłam plik 26 GB, ale otrzymuję:

413 Request Entity Too Large

Wiem, że jest to powiązane client_max_body_size, więc mam ten parametr ustawiony na 30000M.

  location /supercap {
    root  /media/ss/synology_office/server_Seq-Cap/;
    index index.html;
    proxy_pass  http://api/supercap;
  }

  location /supercap/pipe {
    client_max_body_size 30000M;
    client_body_buffer_size 200000k;
    proxy_pass  http://api/supercap/pipe;
    client_body_temp_path /media/ss/synology_office/server_Seq-Cap/tmp_nginx;
  }

Ale nadal pojawia się ten błąd po przesłaniu całego pliku.

Odpowiedzi:


69

Zmodyfikuj plik konfiguracyjny NGINX

sudo nano /etc/nginx/nginx.conf

Szukaj dla tej zmiennej: client_max_body_size. Jeśli go znajdziesz, po prostu zwiększ na przykład jego rozmiar do 100 M. Jeśli nie istnieje, możesz dodać go wewnątrz i na końcu http

client_max_body_size 100M;

Uruchom ponownie nginx, aby zastosować zmiany.

sudo service nginx restart

Zmodyfikuj plik PHP.ini pod kątem limitów przesyłania

Nie jest to konieczne we wszystkich konfiguracjach, ale może być również konieczne zmodyfikowanie ustawień przesyłania PHP, aby upewnić się, że konfiguracje php nie wykraczają poza limity.

Jeśli używasz PHP5-FPM, użyj następującego polecenia,

sudo nano /etc/php5/fpm/php.ini

Jeśli używasz PHP7.0-FPM użyj następującego polecenia,

sudo nano /etc/php/7.0/fpm/php.ini

Teraz znajdź kolejno następujące dyrektywy

upload_max_filesize
post_max_size

i zwiększ jego limit do 100 mln, domyślnie są to 8 mln i 2 mln.

upload_max_filesize = 100M
post_max_size = 100M

Na koniec zapisz i uruchom ponownie PHP.

Użytkownicy PHP5-FPM korzystają z tego,

sudo service php5-fpm restart

Użytkownicy PHP7.0-FPM korzystają z tego,

sudo service php7.0-fpm restart

Będzie dobrze działać !!!


1
dlaczego 100 Mb dla client_max_body_size w nginx.conf?
user2979409,

możesz podać dowolną wartość zgodnie ze swoimi wymaganiami, ale 100 mb wystarczy
Sukhjinder Singh

ale przesyłam do 30 GB plików.
user2979409

znajdź plik o maksymalnym rozmiarze i zezwól na więcej niż ten plik
Sukhjinder Singh

więc dlaczego client_max_body_size nie działa w mojej / lokalizacji?
user2979409,

9

Jeśli przesyłasz pliki o tym rozmiarze, prawdopodobnie powinieneś po prostu całkowicie wyłączyć sprawdzanie rozmiaru ciała za pomocą:

client_max_body_size 0;

3

Z szacunkiem nie jestem pewien, dlaczego używasz protokołu HTTP do przesyłania tak dużej ilości danych. Często wykonuję moje duże transfery za pośrednictwem ssh

//such as:
tar cjf - /path/to/stuff | ssh user@remote-host "cd /path/to/remote/stuff;tar xjf -"

... co daje mi skompresowany bzip. Ale gdybym musiał wykonać wznawiający transfer, mógłbym użyć sftp, lftp, a nawet rsync. Każdy z nich (lub ich pochodne lub rodzeństwo) jest w stanie

  1. w razie potrzeby wykorzystując zaszyfrowany kanał,
  2. wznowienie przerwanego transferu i
  3. kompresowanie transferu

Tylko jedna z tych opcji byłaby dla Ciebie dostępna podczas próby przesłania przez HTTP (a mianowicie nr 1, jeśli korzystasz z https).

Mam nadzieję, że przyjrzysz się jednej z powyższych lub kilku innych alternatyw.


To nie ma nic wspólnego z pytaniem.
Zenklys,

1
Jest tam tylko dlatego, że facet przesyła pliki w skali Blueray przez http. Bez dokładniejszego wyjaśnienia, dlaczego ktoś chciałby to zrobić, sądzę, że temu facetowi, który zadałby to pytanie, najlepiej byłoby nie odpowiedzieć na pytanie. Przyznaję, że moja nieznajomość tych szczegółów stanowi problem.
Matt Murphy,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.