ত্রুটি413 অনুরোধ সত্তা খুব বড় মানে রিকোয়েস্ট বডি (সাধারণত একটি ফাইল আপলোড বা বড় JSON পেলোড) আপনার সার্ভারের অনুমতি দেওয়া সাইজ সীমা অতিক্রম করে। এটি প্রায়শই শুধুমাত্র nginx ডিফল্টের কারণে উৎপাদনে প্রদর্শিত হয়। প্রতিটি স্তরে এটি কীভাবে ঠিক করবেন তা এখানে।
📋 Table of Contents
- এই ত্রুটির কারণ কি
- ফিক্স 3: মাল্টার ফাইল আপলোড সীমা
- তিনটি স্তর একসাথে
- একটি 50MB আপলোড সফল হওয়ার জন্য, সমস্ত সীমা অবশ্যই এটিকে অনুমতি দিতে হবে:
- অন্যান্য সার্ভারের জন্য ঠিক করুন
- বড় ফাইলগুলির জন্য, এগুলিকে আপনার অ্যাপ সার্ভারের মাধ্যমে মোটেও রুট করবেন না — সরাসরি S3/ক্লাউড স্টোরেজে আপলোড করতে নির্ধারিত URL ব্যবহার করুন:
- প্রায়শই জিজ্ঞাসিত প্রশ্ন
- উত্তর: প্রোডাকশনে সাধারণত আপনার অ্যাপের সামনে একটি ডিফল্ট 1MB বডি সীমা সহ nginx (বা অন্য একটি বিপরীত প্রক্সি) থাকে। স্থানীয়ভাবে আপনি সেই প্রক্সি ছাড়াই সরাসরি আপনার অ্যাপে আঘাত করেন। বৃদ্ধি
- বৃদ্ধি
এই ত্রুটির কারণ কি
একাধিক স্তর একটি বড় অনুরোধ প্রত্যাখ্যান করতে পারে:
- Nginx (বিপরীত প্রক্সি) একটি ডিফল্ট 1MB বডি সীমা আছে Express/Node.js
- বডি পার্সারের নিজস্ব সীমা আছে (ডিফল্ট ~100KB) মিডলওয়্যার আপলোড করুন (multer) কনফিগারযোগ্য ফাইল আকারের সীমা আছে
- অনুরোধটিকে অবশ্যই সমস্ত স্তর পাস করতে হবে — শুধুমাত্র একটি ঠিক করলে এটি সমাধান নাও হতে পারে৷ফিক্স 1: Nginx ক্লায়েন্ট_max_body_size
ফিক্স 2: এক্সপ্রেস বডি পার্সার সীমা
ফিক্স 3: মাল্টার ফাইল আপলোড সীমা
# nginx is the most common culprit — default is 1MB
# In your server or location block:
server {
# Allow up to 50MB request bodies
client_max_body_size 50M;
location /api/upload {
client_max_body_size 100M; # larger for upload endpoints
proxy_pass http://localhost:3000;
}
}
# Or globally in http block (/etc/nginx/nginx.conf):
http {
client_max_body_size 50M;
}
# Reload nginx after changing
sudo nginx -t && sudo systemctl reload nginx
তিনটি স্তর একসাথে
const express = require('express');
const app = express();
// 🐛 Default limit is ~100KB — large JSON fails
app.use(express.json());
// ✅ Increase the limit
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));
// For specific routes only:
app.post('/api/large', express.json({ limit: '100mb' }), handler);
একটি 50MB আপলোড সফল হওয়ার জন্য, সমস্ত সীমা অবশ্যই এটিকে অনুমতি দিতে হবে:
const multer = require('multer');
// Configure size limits for file uploads
const upload = multer({
storage: multer.diskStorage({ /* ... */ }),
limits: {
fileSize: 50 * 1024 * 1024, // 50MB per file
files: 5, // max 5 files
},
});
app.post('/upload', upload.single('file'), (req, res) => {
res.json({ filename: req.file.filename });
});
// Handle multer's own limit error gracefully
app.use((err, req, res, next) => {
if (err instanceof multer.MulterError && err.code === 'LIMIT_FILE_SIZE') {
return res.status(413).json({ error: 'File too large (max 50MB)' });
}
next(err);
});
অন্যান্য সার্ভারের জন্য ঠিক করুন
আরও ভালো পদ্ধতি: অবজেক্ট স্টোরেজে সরাসরি আপলোড করুন
# 1. nginx (if used as reverse proxy)
client_max_body_size 50M;
# 2. Express body parser (for JSON/form data)
app.use(express.json({ limit: '50mb' }));
# 3. Multer (for multipart file uploads)
limits: { fileSize: 50 * 1024 * 1024 }
# The SMALLEST limit wins — the request fails at the first layer that rejects it
বড় ফাইলগুলির জন্য, এগুলিকে আপনার অ্যাপ সার্ভারের মাধ্যমে মোটেও রুট করবেন না — সরাসরি S3/ক্লাউড স্টোরেজে আপলোড করতে নির্ধারিত URL ব্যবহার করুন:
# Apache — in .htaccess or config
LimitRequestBody 52428800 # 50MB in bytes
# Cloudflare — free plan limits uploads to 100MB
# (upgrade or upload directly to storage for larger files)
# Next.js API routes — configure the body size limit
export const config = {
api: {
bodyParser: { sizeLimit: '50mb' },
},
};
প্রায়শই জিজ্ঞাসিত প্রশ্ন
প্রশ্নঃ কেন এটি স্থানীয়ভাবে কাজ করে কিন্তু উৎপাদনে ব্যর্থ হয়?
// Backend generates a presigned upload URL
app.post('/api/presign', async (req, res) => {
const url = await s3.getSignedUrl('putObject', {
Bucket: 'my-bucket',
Key: `uploads/${req.body.filename}`,
Expires: 300,
});
res.json({ uploadUrl: url });
});
// Frontend uploads directly to S3 — bypasses your server's limits entirely
const { uploadUrl } = await fetch('/api/presign', { /* ... */ }).then(r => r.json());
await fetch(uploadUrl, { method: 'PUT', body: file });
// No 413 — the file never passes through your app server
উত্তর: প্রোডাকশনে সাধারণত আপনার অ্যাপের সামনে একটি ডিফল্ট 1MB বডি সীমা সহ nginx (বা অন্য একটি বিপরীত প্রক্সি) থাকে। স্থানীয়ভাবে আপনি সেই প্রক্সি ছাড়াই সরাসরি আপনার অ্যাপে আঘাত করেন। বৃদ্ধি
nginx-এ।
প্রশ্ন: আমি এক্সপ্রেসের সীমা বাড়িয়েছি কিন্তু এখনও 413 পেয়েছি। কেন?client_max_body_sizeউত্তর: এক্সপ্রেসে পৌঁছানোর আগেই nginx অনুরোধটি প্রত্যাখ্যান করছে। বিপরীত প্রক্সি এর
বাড়াতে হবে। সমস্ত স্তর ঠিক করুন — ক্ষুদ্রতম সীমা জয়।
প্রশ্ন: একটি যুক্তিসঙ্গত শরীরের আকার সীমা কি?client_max_body_sizeউত্তর: এটিকে আপনার ব্যবহারের ক্ষেত্রে যতটা অনুমতি দেয় তত কম সেট করুন — বড় সীমা অপব্যবহার/DoS ঝুঁকি বাড়ায়। JSON API-এর জন্য, কয়েক এমবি যথেষ্ট। ফাইল আপলোডের জন্য, আপনার বৃহত্তম বৈধ ফাইলের আকার, বা আরও ভাল, সরাসরি অবজেক্ট স্টোরেজে আপলোড করুন।
প্রশ্ন: বড় ফাইলগুলি কি আমার অ্যাপ সার্ভারের মধ্য দিয়ে যাওয়া উচিত?
উত্তর: আদর্শভাবে না — সরাসরি S3/ক্লাউড স্টোরেজে আপলোড করতে নির্ধারিত URL ব্যবহার করুন। এটি শরীরের আকারের সীমা সম্পূর্ণরূপে এড়ায়, সার্ভারের লোড কমায় এবং আরও ভাল স্কেল করে। আপনার অ্যাপের মাধ্যমে শুধুমাত্র মেটাডেটা রুট করুন।
প্রশ্ন: আমি কীভাবে একটি কাঁচা 413 এর পরিবর্তে একটি বন্ধুত্বপূর্ণ ত্রুটি ফেরত দেব?
উত্তর: আপনার মিডলওয়্যারে সীমা ত্রুটিটি ধরুন (মাল্টারের LIMIT_FILE_SIZE, বা একটি বডি-পার্সারের ত্রুটি) এবং একটি পরিষ্কার JSON বার্তা ফেরত দিন৷ অবিলম্বে প্রতিক্রিয়া জানাতে আপলোড করার আগে ফ্রন্টএন্ডে ফাইলের আকার যাচাই করুন।
উপসংহার
“413 রিকোয়েস্ট এন্টিটি খুব বড়” মানে একটি অনুরোধের বডি সার্ভারের সীমা ছাড়িয়ে গেছে — এবং এতে প্রায়ই একাধিক স্তর থাকে। সমাধান:
বৃদ্ধি
nginx-এ, এক্সপ্রেসের বডি পার্সার বাড়ান, এবং মাল্টার কনফিগার করুনclient_max_body_size — তিনটিই মাপকে অনুমতি দিতে হবে যেহেতু ক্ষুদ্রতম সীমা জিতেছে। এটি সাধারণত nginx এর 1MB ডিফল্টের কারণে উৎপাদনে উপস্থিত হয়। বড় ফাইলগুলির জন্য, সর্বোত্তম সমাধান হল নির্ধারিত ইউআরএল সহ সরাসরি অবজেক্ট স্টোরেজে আপলোড করা, আপনার অ্যাপ সার্ভারের সীমা সম্পূর্ণভাবে বাইপাস করা এবং আরও ভালভাবে স্কেল করা।limit — তিনটিই মাপকে অনুমতি দিতে হবে যেহেতু ক্ষুদ্রতম সীমা জিতেছে। এটি সাধারণত nginx এর 1MB ডিফল্টের কারণে উৎপাদনে উপস্থিত হয়। বড় ফাইলগুলির জন্য, সর্বোত্তম সমাধান হল নির্ধারিত ইউআরএল সহ সরাসরি অবজেক্ট স্টোরেজে আপলোড করা, আপনার অ্যাপ সার্ভারের সীমা সম্পূর্ণভাবে বাইপাস করা এবং আরও ভালভাবে স্কেল করা।fileSize — তিনটিই মাপকে অনুমতি দিতে হবে যেহেতু ক্ষুদ্রতম সীমা জিতেছে। এটি সাধারণত nginx এর 1MB ডিফল্টের কারণে উৎপাদনে উপস্থিত হয়। বড় ফাইলগুলির জন্য, সর্বোত্তম সমাধান হল নির্ধারিত ইউআরএল সহ সরাসরি অবজেক্ট স্টোরেজে আপলোড করা, আপনার অ্যাপ সার্ভারের সীমা সম্পূর্ণভাবে বাইপাস করা এবং আরও ভালভাবে স্কেল করা।
🔗 Share this article
✍️ Leave a Comment