Server

413 Request Entity Too Large — Kenapa Perbaikan Anda Gagal

Diperbarui 2026-09-09Baca ~9 menit

413 Request Entity Too Large berarti persis seperti bunyinya: yang Anda kirim lebih besar dari yang bersedia diterima server. Anda akan menemuinya saat mengunggah gambar, video, dump database, atau berkas cadangan.

Kesulitannya bukan pada cara memperbaiki, melainkan pada jumlah tempat yang perlu diperbaiki. Batas ukuran ditetapkan di dua lapisan atau lebih yang saling independen — server web dan runtime bahasa — dan sebuah request harus melewati semuanya. Naikkan satu saja, perilakunya sama sekali tidak berubah, dan karena itu banyak orang menyimpulkan mereka salah mengedit berkas lalu mencari ke tempat lain.

Panduan ini membahas setiap lapisan sesuai urutan yang layak diubah, plus beberapa jebakan yang membuat error tetap ada meski semuanya sudah Anda ubah dengan benar.

Ada berapa lapisan batas?

Tabel ini adalah inti artikel. Pahami ini dan Anda bisa menyelesaikan hampir semua kasus sendiri.

LapisanPengaturanDefault umum
Nginxclient_max_body_size1 MB
ApacheLimitRequestBodyTanpa batas (tapi host sering menyetelnya)
PHPupload_max_filesize2 MB
PHPpost_max_size8 MB
Cloudflare (via proxy)Batas paket100 MB pada paket gratis
Aplikasi AndaBatasnya sendiriBervariasi
💡 Sebuah request harus melewati setiap lapisan di jalurnya, dan lapisan dengan nilai terendah yang menentukan. Menaikkan PHP ke 100 MB sementara Nginx masih di default 1 MB sama sekali tidak mengubah apa pun.

Memperbaiki di Nginx

Di Nginx inilah lapisan yang pertama Anda tabrak, karena default 1 MB lebih kecil daripada satu foto dari ponsel masa kini.

Tambahkan direktif client_max_body_size. Ia bisa diletakkan di blok http (seluruh server), blok server (satu situs), atau blok location (satu jalur) — misalnya 64m atau 128m, sesuai kebutuhan nyata.

Selalu validasi dengan "nginx -t" sebelum reload. Merestart dengan berkas konfigurasi yang salah sintaks membuat layanan tidak naik dan situs langsung down.

Satu jebakan: kalau direktif muncul di beberapa tempat, blok yang lebih spesifik menang. Kalau Anda sudah menaikkannya di http tapi tidak ada perubahan, cari nilai lama yang masih tertinggal di blok server atau location yang menangani jalur unggahan.

💡 Setel seperlunya saja. Jangan pernah memakai 0 (tanpa batas) di situs publik — itu mengundang siapa pun mendorong badan request sebesar apa pun sampai disk atau memori habis.

Memperbaiki di PHP — dan jebakan yang hampir semua orang kena

PHP punya dua pengaturan yang harus diubah bersamaan, dan di sinilah perbaikan paling sering kurang lengkap.

upload_max_filesize membatasi tiap berkas secara individual. post_max_size membatasi seluruh badan request. Aturannya, post_max_size harus lebih besar dari upload_max_filesize, karena request juga membawa data formulir selain berkas.

Dan kalau formulir Anda mengunggah beberapa berkas sekaligus, post_max_size harus menampung totalnya, bukan hanya yang terbesar. Orang yang menyetel keduanya 50 MB lalu mengunggah tiga berkas 20 MB tetap akan melihat error ini.

Diubah di mana: php.ini kalau Anda punya akses, kalau tidak lewat .user.ini atau .htaccess sesuai yang diizinkan host. Kalau memakai PHP-FPM, Anda harus merestart php-fpm, bukan sekadar reload server web — detail satu ini adalah alasan banyak orang mengira suntingannya diabaikan.

Pastikan nilainya benar-benar berlaku lewat phpinfo() atau "php -i", jangan berasumsi. Sistem sering punya beberapa berkas php.ini, dan yang benar-benar dimuat bisa jadi bukan yang baru Anda sunting.

Jebakan Cloudflare

Kalau situs Anda diproksi lewat Cloudflare, ada satu batas lagi yang sama sekali tidak berada di server Anda.

Paket gratis membatasi ukuran request sekitar 100 MB, dan paket berbayar punya plafonnya sendiri. Apa pun yang lebih besar ditolak sebelum sampai ke Anda, artinya berapa pun konfigurasi sisi server diubah tidak akan membantu.

Memastikannya mudah: unggah langsung ke server dengan melewati Cloudflare, dengan sementara mengarahkan domain ke IP asli lewat berkas hosts. Kalau berhasil, Cloudflare-lah pembatasnya.

Solusi praktisnya adalah berhenti mengirim berkas besar melalui proxy — gunakan subdomain terpisah dengan proxy dimatikan untuk unggahan, atau biarkan browser mengunggah langsung ke object storage. Untuk berkas yang benar-benar besar, itu memang arsitektur yang lebih baik.

💡 Tandanya: berkas kecil terunggah lancar, yang besar gagal, dan halaman errornya bergaya Cloudflare, bukan gaya server web Anda.

Sudah diubah semua tapi tetap gagal? Periksa ini

  • Anda merestart layanan yang salah. Perubahan php.ini butuh php-fpm direstart; perubahan nginx.conf butuh nginx direload. Melakukan satu tapi lupa yang lain sangat umum.
  • Nilai lama bertahan di blok yang lebih spesifik. Anda menaikkan client_max_body_size di http, tapi blok location yang menangani unggahan masih memakai nilai aslinya.
  • Berkas yang Anda sunting bukan yang sedang dimuat. Cek phpinfo() untuk jalur berkas konfigurasi yang dimuat dan nilai saat ini — host sering menimpanya di tempat lain.
  • Aplikasi punya batasnya sendiri. WordPress, DirectAdmin, dan banyak framework menerapkan batas yang independen dari server.
  • Unggahannya kehabisan waktu, bukan ditolak karena ukuran. Kalau melebihi max_execution_time atau max_input_time Anda mendapat kegagalan berbeda — biasanya 504 atau halaman kosong — yang terbaca seolah perbaikannya tidak berhasil.

Kalau Anda di shared hosting dan tidak bisa mengubahnya

Perlu dikatakan terus terang, karena ini batas yang tidak bisa diselesaikan konfigurasi.

Di shared hosting Anda biasanya bisa menyesuaikan sisi PHP lewat .user.ini atau .htaccess, tapi client_max_body_size adalah direktif tingkat server yang dipakai bersama semua pelanggan, jadi penyedia tidak membukanya. Kalau host membatasi di 8 MB, itulah plafonnya.

Ada tiga pilihan. Minta penyedia menaikkannya — sebagian mau. Ubah jalur unggahannya sama sekali, kirim berkas ke object storage atau lewat SFTP lalu biarkan aplikasi mengambilnya. Atau pindah ke VPS di mana setiap berkas konfigurasi adalah milik Anda.

Untuk berkas yang benar-benar besar, pilihan kedua biasanya terbaik apa pun hosting Anda, karena mendorong ratusan megabyte lewat satu request HTTP memang rapuh berapa pun tinggi batas yang disetel.

Ingin mengendalikan setiap lapisan konfigurasi sendiri?

Cloud VPS NVMe dengan akses root penuh — sunting nginx.conf dan php.ini langsung, tanpa plafon dari penyedia. Mulai ฿150/bulan.

Pertanyaan yang Sering Diajukan

Sudah menaikkan upload_max_filesize tapi unggahan tetap gagal. Kenapa?

Hampir selalu karena post_max_size belum ikut dinaikkan, atau client_max_body_size Nginx masih di default. Batas-batas itu bertumpuk dan yang terendah menentukan. Pastikan lewat phpinfo() bahwa nilainya benar-benar berlaku, dan ingat merestart php-fpm, bukan hanya reload server web.

Sebaiknya batasnya disetel berapa?

Sebesar kebutuhan nyata ditambah sedikit margin — 32 sampai 64 MB sudah nyaman untuk foto ponsel. Jangan setel tanpa batas di situs publik; itu membiarkan siapa pun mendorong badan request sebesar apa pun sampai disk atau memori habis.

Apa beda 413 dan 414?

413 berarti badan request terlalu besar, terjadi saat mengunggah berkas atau mengirim formulir besar. 414 URI Too Long berarti URL-nya sendiri terlalu panjang, biasanya dari query string yang tidak wajar panjangnya. Penyebab berbeda, tempat perbaikan berbeda.

Situs saya di belakang Cloudflare dan perubahan di server tidak berpengaruh.

Cloudflare menerapkan plafon ukuran request sendiri (sekitar 100 MB di paket gratis) sebelum trafik sampai ke Anda. Uji dengan mengunggah saat Cloudflare dilewati. Kalau berhasil, alihkan unggahan besar ke luar proxy — subdomain tanpa proxy, atau unggah langsung ke object storage.