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

«413 Request Entity Too Large» в Nginx с установленным «client_max_body_size»

Я загружаю файл размером 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;
  }

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

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

sudo nano /etc/nginx/nginx.conf

Найдите эту переменную: client_max_body_size. Если вы его найдете, просто увеличьте его размер, например, до 100 МБ. Если его не существует, вы можете добавить его внутри и в конец 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

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

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

client_max_body_size 0;

С уважением, я не уверен, почему вы используете 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).

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