“ 413 คำขอเอนทิตีใหญ่เกินไป” ใน Nginx โดยตั้งค่า“ client_max_body_size”


54

ฉันกำลังอัพโหลดไฟล์ 26Gb แต่ฉันได้รับ:

413 Request Entity Too Large

ฉันรู้ว่านี้จะเกี่ยวข้องกับดังนั้นฉันมีชุดพารามิเตอร์นี้เพื่อclient_max_body_size30000M

  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;
  }

แต่ฉันยังคงได้รับข้อผิดพลาดนี้เมื่ออัปโหลดไฟล์ทั้งหมดแล้ว

คำตอบ:


69

แก้ไขไฟล์การกำหนดค่า 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

คุณสามารถใส่ค่าใด ๆ ตามความต้องการของคุณ แต่ 100 mb ก็เพียงพอแล้ว
Sukhjinder Singh

แต่ฉันกำลังอัปโหลดไฟล์สูงสุด 30Gb
user2979409

ค้นหาไฟล์ที่มีขนาดสูงสุดและอนุญาตให้มากกว่าไฟล์นั้น
Sukhjinder Singh

เหตุใด client_max_body_size จึงไม่ทำงานภายใน / ที่ตั้งของฉัน
user2979409

9

หากคุณกำลังอัปโหลดไฟล์ที่มีขนาดนั้นคุณควรปิดการตรวจสอบขนาดร่างกายพร้อมกับ:

client_max_body_size 0;

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 โดยไม่มีรายละเอียดเพิ่มเติมว่าทำไมบางคนต้องการทำสิ่งนี้ฉันตัดสินว่าคนที่ถามคำถามนั้นจะได้รับการบริการที่ดีที่สุดโดยไม่ตอบคำถามได้สำเร็จ ฉันรับทราบว่าการไม่รู้รายละเอียดเหล่านั้นเป็นปัญหา
Matt Murphy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.