Unggahan yang gagal pada batas ukuran tertentu itu soal batas — lihat 413 Permintaan terlalu besar. Unggahan yang gagal di tengah jalan, pada ukuran yang tidak tetap, dengan sambungan yang begitu saja putus, adalah tenggat waktu di suatu titik sepanjang jalurnya.
Tenggat waktu yang harus dinaikkan — semuanya
# nginx
client_body_timeout 300s;
client_max_body_size 512M;
send_timeout 300s;
fastcgi_read_timeout 300s;
proxy_read_timeout 300s;
; php
max_execution_time = 300
max_input_time = 300 ; the one that is forgotten - it covers the UPLOAD itself
max_input_time membatasi berapa lama PHP menerima permintaan itu. Ia terpisah dari max_execution_time, bawaannya rendah, dan itulah yang mematikan unggahan lambat dari sebuah telepon.
Cakram dan ruang sementara
df -h /tmp /var/lib/php/tmp
grep upload_tmp_dir /etc/php/8.3/fpm/php.ini
Unggahan ditulis dulu ke berkas sementara. Kalau sistem berkas itu penuh, penulisannya gagal di tengah pemindahan dan sambungannya putus tanpa pesan di mana pun.
Cari apa yang tercatat
sudo tail -50 /var/log/nginx/error.log
sudo journalctl -u php8.3-fpm -n 50 --no-pager
client intended to send too large body adalah batas ukurannya. timed out dan upstream prematurely closed adalah tenggat waktu di atas. Tidak ada catatan sama sekali biasanya berarti peramban atau perantara menyerah lebih dulu daripada servernya.
Perbaikan yang benar untuk berkas besar
Unggahan bertahap atau yang bisa dilanjutkan mengirim berkas besar sebagai banyak permintaan kecil, sehingga tidak ada satu pun permintaan yang berjalan lama dan sambungan yang putus melanjutkan, bukan mengulang dari awal. Untuk apa pun di atas beberapa ratus megabita, itulah satu-satunya jawaban yang bisa diandalkan.