«Слишком большой объект запроса 413» в Nginx с установленным параметром «client_max_body_size»

55

Я загружаю файл размером 26 ГБ, но получаю:

413 Request Entity Too Large

Я знаю, это связано с client_max_body_size, поэтому у меня установлен этот параметр 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;
  }

Но я все еще получаю эту ошибку, когда весь файл был загружен.

user2979409
источник

Ответы:

72

Изменить файл конфигурации NGINX

sudo nano /etc/nginx/nginx.conf

Поиск этой переменной: client_max_body_size. Если вы найдете его, просто увеличьте его размер, например, до 100M. Если он не существует, то вы можете добавить его внутри и в конце http

client_max_body_size 100M;

Перезапустите nginx, чтобы применить изменения.

sudo service nginx restart

Изменить файл PHP.ini для ограничения загрузки

Это не требуется во всех конфигурациях, но вам также может потребоваться изменить настройки загрузки PHP, чтобы гарантировать, что ничто не выходит за пределы при настройке php.

Если вы используете PHP5-FPM, используйте следующую команду,

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

Если вы используете PHP7.0-FPM, используйте следующую команду,

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

Теперь найдите следующие директивы одну за другой

upload_max_filesize
post_max_size

и увеличьте его предел до 100M, по умолчанию они составляют 8M и 2M.

upload_max_filesize = 100M
post_max_size = 100M

Наконец сохраните его и перезапустите PHP.

Пользователи PHP5-FPM используют это,

sudo service php5-fpm restart

Пользователи PHP7.0-FPM используют это,

sudo service php7.0-fpm restart

Это будет работать нормально !!!

Сукхиндер Сингх
источник
1
почему 100Mb для client_max_body_size в nginx.conf?
user2979409 14.11.16
Вы можете
указать
но я загружаю до 30 Гб файлов.
user2979409 14.11.16
найти файл максимального размера и разрешить его больше, чем этот файл
Сукхиндер Сингх
так почему client_max_body_size не работает внутри моего / местоположения?
user2979409 14.11.16
9

Если вы загружаете файлы такого размера, вам, вероятно, следует просто отключить проверку размера тела:

client_max_body_size 0;
devius
источник
3

С уважением, я не уверен, почему вы используете http для передачи такого количества данных. Я склонен делать большие переводы через SSH

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

... который дает мне сжатый bzip перевод. Но если бы мне нужно было сделать возобновляемую передачу, я мог бы использовать sftp, lftp, даже rsync. Любой из них (или их производные или родные братья) способен

  1. используя зашифрованный канал при желании,
  2. возобновление прерванной передачи и
  3. сжатие передачи

Только один из них будет вариант для вас при попытке загрузить через http (а именно, # 1, если вы были на https).

Я надеюсь, что вы посмотрите на любой из вышеперечисленных или несколько других альтернатив.

Мэтт Мерфи
источник
Это не имеет ничего общего с вопросом.
Zenklys
1
Это только там, потому что парень передает файлы в масштабе Blueray через http. Не имея более подробной информации о том, почему кто-то хотел бы сделать это, я считаю, что этому парню, который задает вопрос, лучше всего будет не отвечать на этот вопрос. Я признаю, что мое незнание этих деталей является проблемой.
Мэтт Мерфи