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.
| Lapisan | Pengaturan | Default umum |
|---|---|---|
| Nginx | client_max_body_size | 1 MB |
| Apache | LimitRequestBody | Tanpa batas (tapi host sering menyetelnya) |
| PHP | upload_max_filesize | 2 MB |
| PHP | post_max_size | 8 MB |
| Cloudflare (via proxy) | Batas paket | 100 MB pada paket gratis |
| Aplikasi Anda | Batasnya sendiri | Bervariasi |
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.
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.
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.
GUIDES
Artikel terkait
Lanjut membaca topik serupa
502 Bad Gateway — Arti dan Cara Mengatasinya
502 berarti satu server meminta halaman ke server lain dan menerima jawaban yang tidak bisa dipakai. Panduan ini menjelaskan dua mesin mana yang terlibat, beda 502 dengan 500 dan 504, serta urutan pemeriksaan supaya Anda menemukan penyebab aslinya lebih dulu.
Baca selengkapnya504 Gateway Timeout — Penyebab dan Cara Mengatasinya
504 bukan berarti backend mati, melainkan backend hidup tapi terlalu lambat. Itu mengubah tempat Anda mencari: bukan log crash, melainkan query atau panggilan eksternal yang berjalan lebih lama daripada kesabaran server.
Baca selengkapnya429 Too Many Requests — Siapa yang Membatasi Anda?
Pertanyaan pertama bukan bagaimana memperbaikinya, melainkan siapa yang membatasi. Server Anda sendiri, CDN di depannya, dan API yang Anda panggil sama-sama mengembalikan 429 — tapi solusinya berbeda untuk masing-masing.
Baca selengkapnya