การอัปโหลดไฟล์ไปยัง Nextcloud ที่หยุดอยู่ที่ 2 GB มักถูกจำกัดโดยเลเยอร์ใดเลเยอร์หนึ่งในเส้นทางการร้องขอ ไม่ใช่โดยการตั้งค่าทั่วไปของ Nextcloud เพียงอย่างเดียว หากต้องการรองรับไฟล์ขนาดใหญ่กว่านั้น ให้ตั้งค่าเป้าหมายที่สูงกว่าขนาดไฟล์ในทุกเลเยอร์ที่จัดการการอัปโหลด ได้แก่ PHP เว็บเซิร์ฟเวอร์ และพร็อกซีแบบย้อนกลับหรือแผงควบคุมโฮสติ้ง จากนั้นตรวจสอบให้แน่ใจว่าพื้นที่จัดเก็บข้อมูล พื้นที่ชั่วคราว และการหมดเวลาของการร้องขอสามารถรองรับการถ่ายโอนได้
คู่มือนี้ใช้ขนาดไฟล์เป้าหมาย 5 GB เป็นตัวอย่างสำหรับไฟล์ที่มีขนาดไม่เกินประมาณ 4 GB เลือกขนาดที่เหมาะสมกับการใช้งานจริงของคุณ เผื่อพื้นที่สำหรับค่าใช้จ่ายในการร้องขอ (ถ้ามี) และตั้งค่าให้สม่ำเสมอทั่วทั้งระบบ ตัวอย่างเหล่านี้ใช้กับ Nextcloud Server ที่จัดการเองโดยใช้ PHP เท่านั้น การโฮสติ้งแบบจัดการโดยผู้ให้บริการ คอนเทนเนอร์ และอุปกรณ์ต่างๆ อาจมีเส้นทางการกำหนดค่าที่แตกต่างกัน
เหตุใดการอัปโหลดขนาด 2 GB จึงอาจล้มเหลว
คู่มือการดูแลระบบปัจจุบันของ Nextcloud อธิบายว่าการอัปโหลดไฟล์ขนาดใหญ่อาจถูกจำกัดโดยการตั้งค่า PHP และเว็บเซิร์ฟเวอร์ สำหรับการอัปโหลดแบบแบ่งเป็นส่วนๆ เบราว์เซอร์หรือไคลเอ็นต์จะส่งชิ้นส่วนต่างๆ ที่ Nextcloud จะนำมาประกอบกัน คำสั่งกำหนดขนาดไฟล์ของ PHP บางอย่างอาจไม่มีผลต่อคำขอเหล่านั้น ในขณะที่การหมดเวลาของเว็บเซิร์ฟเวอร์หรือ PHP ยังคงมีผลอยู่ พร็อกซี ไฟร์วอลล์ ระบบจัดเก็บข้อมูลเบื้องหลัง โควต้าผู้ใช้ หรือดิสก์ชั่วคราวเต็ม อาจเป็นข้อจำกัดเพิ่มเติม โปรดดูคู่มือการดูแลระบบการอัปโหลดไฟล์ขนาดใหญ่ของ Nextcloudและคู่มือผู้ใช้ Nextcloud เกี่ยวกับการอัปโหลดไฟล์ขนาดใหญ่
“2 GB” อาจหมายถึง 2,000,000,000 ไบต์ หรือ 2 GiB (2,147,483,648 ไบต์) ขีดจำกัดที่แสดงและขีดจำกัดไบต์จริงอาจไม่ตรงกัน บันทึกข้อผิดพลาด ขนาดไฟล์เป็นไบต์ และระบุว่าความล้มเหลวเกิดขึ้นทันทีหรือหลังจากเริ่มดำเนินการแล้ว รายละเอียดเหล่านี้จะช่วยระบุว่าควรตรวจสอบเลเยอร์ใด
1. ระบุเลเยอร์แรกที่ปฏิเสธการอัปโหลด
ก่อนเปลี่ยนการตั้งค่า โปรดสังเกตวิธีการอัปโหลดไฟล์: อินเทอร์เฟซเว็บของ Nextcloud, ไคลเอนต์การซิงค์บนเดสก์ท็อปหรือมือถือ หรือแอปพลิเคชัน WebDAV ทดสอบไฟล์ที่มีขนาดใหญ่กว่าเกณฑ์เดิมเล็กน้อย แต่ห้ามอัปโหลดไฟล์ขนาดหลายกิกะไบต์ซ้ำๆ ในระหว่างการแก้ไขปัญหา ตรวจสอบภาพรวมการดูแลระบบและบันทึกของ Nextcloud, บันทึกข้อผิดพลาดของเว็บเซิร์ฟเวอร์, บันทึก PHP-FPM หรือ Apache และแดชบอร์ดพร็อกซีหรือโฮสติ้งใดๆ ในช่วงเวลาที่เกิดปัญหา
- การตอบสนอง HTTP 413 ทันที มักบ่งชี้ถึงข้อจำกัดของเนื้อหาคำขอในเว็บเซิร์ฟเวอร์หรือพร็อกซี
- ข้อความเตือนของ PHP เกี่ยวกับไฟล์ที่มีขนาดเกินกว่าที่อนุญาต ชี้ไปที่การตั้งค่าการอัปโหลดของ PHP สำหรับคำขอแบบ multipart ทั่วไป
- การถ่ายโอนข้อมูลที่เริ่มต้นแล้วแต่หยุดชะงักหรือหมดเวลา อาจบ่งชี้ถึงการหมดเวลาในการร้องขอ การเชื่อมต่อถูกขัดจังหวะ หรือทรัพยากรมีจำกัด
- ข้อความแจ้งโควต้าที่ชัดเจนหมายความว่า พื้นที่เก็บข้อมูล Nextcloud ที่ผู้ใช้สามารถใช้ได้นั้นเป็นอุปสรรค ไม่ใช่ขีดจำกัดการอัปโหลดของเซิร์ฟเวอร์
นี่เป็นเพียงเบาะแส ไม่ใช่การวินิจฉัยที่แน่ชัด: พร็อกซีอาจแทนที่ข้อผิดพลาดของแอปพลิเคชัน และบันทึกจะแตกต่างกันไปตามการใช้งาน เปรียบเทียบเวลาในแต่ละเลเยอร์ก่อนแก้ไขการกำหนดค่า
2. ตั้งค่าขีดจำกัด PHP สำหรับการอัปโหลดฟอร์มผ่านเบราว์เซอร์
ค้นหาไฟล์การกำหนดค่า PHP ที่ใช้โดยกระบวนการ Nextcloud ที่เชื่อมต่อกับเว็บ บน Debian หรือ Ubuntu ไฟล์ PHP-FPM ทั่วไปจะอยู่ใน/etc/php/<version>/fpm/php.ini; Apache ที่ใช้ mod_php มักจะใช้ไฟล์แยกต่างหากapache2/php.iniการกำหนดค่าบรรทัดคำสั่ง PHP อาจแตกต่างกัน ดังนั้นการแก้ไขไฟล์ที่รายงานโดยphp --iniเพียงอย่างเดียวอาจไม่เปลี่ยนแปลงเว็บไซต์คำแนะนำการกำหนดค่า PHP ของ Nextcloud อธิบายถึงบริบทการกำหนดค่าฝั่งเซิร์ฟเวอร์
หากต้องการจำกัดการใช้งานไว้ที่ 5 GB โปรดตรวจสอบการตั้งค่าเหล่านี้ในการกำหนดค่า PHP ของเว็บที่ใช้งานอยู่:
upload_max_filesize = 5G
post_max_size = 5G
max_input_time = 3600
max_execution_time = 3600
post_max_sizeควรมีขนาดอย่างน้อยเท่ากับupload_max_filesize; การตั้งค่าทั้งสองให้มีเป้าหมายเดียวกันเป็นจุดเริ่มต้นที่ใช้งานได้จริงสำหรับการอัปโหลดไฟล์เดียวแบบหลายส่วน ค่าเวลาข้างต้นเป็นเพียงตัวอย่าง ไม่ใช่การรับประกันว่าการถ่ายโอนจะเสร็จสมบูรณ์: เลือกช่วงเวลาที่เหมาะสมกับแบนด์วิดท์ที่มีอยู่และนโยบายการดำเนินงานของคุณ อย่าเพิ่มค่า PHP memory_limitเป็น 5 GB เพียงเพราะไฟล์มีขนาด 5 GB เอกสาร PHP ระบุว่าmax_input_timeรวมถึงเวลาที่ใช้ในการรับข้อมูลการอัปโหลดและพฤติกรรมการอัปโหลดขึ้นอยู่กับคำสั่งที่เกี่ยวข้อง โปรดดู เอกสารเกี่ยวกับข้อผิดพลาดในการอัปโหลด ของPHP
3. เพิ่มขีดจำกัดการร้องขอของเว็บเซิร์ฟเวอร์
Nginx ร่วมกับ PHP-FPM
ในบล็อกเซิร์ฟเวอร์ Nginx ที่ใช้งานอยู่สำหรับ Nextcloud ให้ตั้งค่าขีดจำกัดเนื้อหาคำขอให้สูงกว่าขนาดไฟล์ที่ใหญ่ที่สุดที่คุณต้องการยอมรับ สำหรับตัวอย่างขนาด 5 GB:
client_max_body_size 5G;
วางค่านี้ไว้ในบริบทที่เหมาะสมหลีกhttpเลี่ยงค่าที่ต่ำกว่าซึ่งขัดแย้งกันในบล็อกที่เฉพาะเจาะจงกว่า Nginx ได้อธิบายคำสั่งนี้ไว้ในเอกสารอ้างอิงโมดูลหลักตัวอย่างการติดตั้ง Nginxของ Nextcloud ยังรวมถึงการตั้งค่าขนาดการอัปโหลดและเวลาหมดอายุด้วย ตรวจสอบความถูกต้องของการกำหนดค่าด้วยก่อนที่จะรีโหลด Nginxserverlocationsudo nginx -t
อะปาเช่
ตรวจสอบว่าโฮสต์เสมือนที่ใช้งานอยู่ การกำหนดค่าไดเร็กทอรี หรือชุดการกำหนดค่าที่รวมอยู่ ตั้งค่าไว้ หรือไม่ LimitRequestBodyในเวอร์ชัน Apache ที่ค่าเริ่มต้นหรือขีดจำกัดที่ระบุอย่างชัดเจนต่ำกว่าเป้าหมายของคุณ ให้เพิ่มค่าเป็นจำนวนไบต์ที่ต้องการ หรือใช้0เฉพาะในกรณีที่ไม่มีข้อจำกัดระดับ Apache หากเป็นที่ยอมรับสำหรับการใช้งานของคุณ ยืนยันว่าคำสั่งนี้อยู่ในบริบทที่อนุญาตโดยเวอร์ชันและการกำหนดค่า Apache ของคุณ Apache อธิบายพฤติกรรมของคำสั่งนี้ในเอกสาร LimitRequestBodyเรียกใช้คำสั่งนี้apachectl configtestก่อนที่จะโหลดบริการใหม่
4. ตรวจสอบพร็อกซีแบบย้อนกลับ คอนเทนเนอร์ และพื้นที่จัดเก็บข้อมูล
หากทราฟฟิกผ่านอินสแตนซ์ Nginx อื่น, โหลดบาลานเซอร์, แผงควบคุมโฮสติ้ง หรือพร็อกซีความปลอดภัย ขนาดของเนื้อหาและขีดจำกัดเวลาหมดอายุจะต้องอนุญาตให้มีการอัปโหลดด้วยเช่นกัน คำขออาจถูกปฏิเสธก่อนที่จะถึง Nextcloud อัปเดตเฉพาะเลเยอร์ที่เป็นเจ้าของค่าการตั้งค่านั้น จากนั้นตรวจสอบบันทึกและรหัสการตอบสนอง สำหรับการใช้งาน Docker หรือคอนเทนเนอร์อื่นๆ ให้เปลี่ยนการกำหนดค่าที่ติดตั้งในคอนเทนเนอร์ที่กำลังทำงานอยู่ หรือการตั้งค่าสภาพแวดล้อมที่รองรับสำหรับอิมเมจนั้น ไฟล์ PHP บนโฮสต์อาจไม่ได้ถูกใช้งานโดยคอนเทนเนอร์เลย
การอัปโหลดไฟล์ขนาดใหญ่ก็ใช้ทรัพยากรมากเช่นกัน ตรวจสอบให้แน่ใจว่าไดรฟ์ข้อมูลของ Nextcloud มีพื้นที่ว่างเพียงพอ และไดเร็กทอรีชั่วคราวของ PHP หรือเว็บเซิร์ฟเวอร์สามารถรองรับปริมาณงานได้ สำหรับการอัปโหลดแบบแบ่งเป็นส่วนๆ อาจจำเป็นต้องใช้พื้นที่ชั่วคราวในขณะที่กำลังรวบรวมส่วนต่างๆ เหล่านั้น การใช้งานระบบจัดเก็บข้อมูลแบบอ็อบเจ็กต์อาจต้องการดิสก์ชั่วคราวเพิ่มเติม วางแผนสำหรับการอัปโหลดพร้อมกันหลายไฟล์ ไม่ใช่แค่ไฟล์ขนาดสูงสุดไฟล์เดียว ตรวจสอบส่วนเกี่ยวกับพื้นที่ชั่วคราวและการอัปโหลดไฟล์ขนาดใหญ่ ใน Nextcloud ก่อนที่จะเพิ่มขีดจำกัดในระบบที่มีการใช้งานมาก
5. ปรับใช้การเปลี่ยนแปลงและตรวจสอบด้วยการทดสอบแบบควบคุม
หลังจากตรวจสอบการตั้งค่าเสร็จสิ้นแล้ว ให้รีโหลดหรือรีสตาร์ทบริการ PHP-FPM และเว็บเซิร์ฟเวอร์ที่เกี่ยวข้อง เพื่อให้ระบบอ่านการตั้งค่าที่อัปเดตแล้ว ชื่อบริการที่แน่นอนจะแตกต่างกันไปตามการแจกจ่ายและเวอร์ชัน PHP หลีกเลี่ยงการรีสตาร์ทบริการที่ใช้งานจริงที่ไม่เกี่ยวข้อง จากนั้นอัปโหลดไฟล์ที่มีขนาดใหญ่กว่าขีดจำกัด 2 GB เล็กน้อย เช่น ไฟล์ทดสอบที่ทราบขนาดประมาณ 2.1 GB โดยใช้ไคลเอนต์และเส้นทางเดียวกันกับที่เคยล้มเหลวในครั้งแรก รักษาขนาดไฟล์ทดสอบให้อยู่ต่ำกว่าขีดจำกัดใหม่ และตรวจสอบพื้นที่ว่างในดิสก์ บันทึก และความคืบหน้าการถ่ายโอน
การทดสอบที่สำเร็จควรเสร็จสิ้นโดยไม่มีข้อผิดพลาดเกี่ยวกับขนาดไฟล์ HTTP หรือการหมดเวลา ปรากฏในโฟลเดอร์ Nextcloud ที่ต้องการ และมีขนาดไฟล์ที่สมเหตุสมผลเมื่อตรวจสอบจากฝั่งไคลเอ็นต์ สำหรับไฟล์สำคัญ ให้เปรียบเทียบค่าตรวจสอบความถูกต้อง (checksum) ที่ต้นทางและปลายทางหากเวิร์กโฟลว์ของคุณรองรับ การที่แถบแสดงความคืบหน้าถึง 100 เปอร์เซ็นต์เพียงอย่างเดียวไม่ได้ยืนยันว่าไฟล์ที่จัดเก็บเสร็จสมบูรณ์แล้ว
เมื่อวิธีแก้ไขนี้ไม่เพียงพอ
- การอัปโหลดผ่านเว็บใช้งานได้ แต่ไคลเอนต์บนเดสก์ท็อปใช้งานไม่ได้:โปรดตรวจสอบพฤติกรรมการหมดเวลาของไคลเอนต์ พร็อกซี และเซิร์ฟเวอร์ ไคลเอนต์ Nextcloud ใช้การอัปโหลดแบบแบ่งเป็นส่วนๆ ดังนั้นการเปลี่ยนแปลงโค้ด PHP
upload_max_filesizeเพียงอย่างเดียวอาจไม่สามารถแก้ไขปัญหาการหมดเวลาของการร้องขอส่วนข้อมูลหรือการหมดเวลาของการประกอบขั้นสุดท้ายได้
- ข้อความแสดงข้อผิดพลาดระบุว่าพื้นที่ของผู้ใช้เต็มแล้ว:โปรดปรับโควต้า Nextcloud หรือพื้นที่เก็บข้อมูลฟรีของผู้ใช้นั้น การเพิ่มขีดจำกัดการร้องขอจะไม่สร้างความจุเพิ่ม
- ความล้มเหลวเกิดขึ้นที่จำนวนไบต์เดียวกันสำหรับลูกค้าทุกราย:ตรวจสอบหาพร็อกซีที่ใช้ร่วมกัน, WAF, ผู้ให้บริการโฮสติ้ง หรือข้อจำกัดของเว็บเซิร์ฟเวอร์ และเปรียบเทียบบันทึกของอุปกรณ์เหล่านั้นกับคำขอ
- การอัปโหลดเสร็จสมบูรณ์ แต่ใช้พื้นที่ดิสก์ชั่วคราวมากเกินไป:ลดจำนวนการอัปโหลดพร้อมกัน ตรวจสอบให้แน่ใจว่ามีพื้นที่จัดเก็บชั่วคราวเพียงพอ หรือตรวจสอบพฤติกรรมการแบ่งส่วนและการจัดเก็บข้อมูลที่ระบุไว้ในเอกสารสำหรับแบ็กเอนด์ของคุณ
การเพิ่มขีดจำกัดการอัปโหลดจะขยายขอบเขตสิ่งที่ผู้ใช้สามารถส่งไปยังเซิร์ฟเวอร์ได้ ดังนั้นจึงควรควบคู่ไปกับการกำหนดโควต้า การตรวจสอบ พื้นที่จัดเก็บข้อมูลที่เพียงพอ และการควบคุมการเข้าถึงที่เหมาะสม ไม่มีขีดจำกัดสูงสุดที่ปลอดภัยอย่างเป็นสากล: ขีดจำกัดสูงสุดในทางปฏิบัติขึ้นอยู่กับขีดจำกัดที่ช้าที่สุดในเส้นทางการร้องขอและความจุของเซิร์ฟเวอร์และระบบจัดเก็บข้อมูล
เอกสารอ้างอิง