آیا تا به حال با صفحهای مواجه شدهاید که تنها عبارت سرد و بیروح “502 Bad Gateway” را نشان میدهد؟ برای مدیران سرور و صاحبان وبسایت، این خطا یکی از استرسزاترین پیامهایی است که میتواند وبسایت آنها را به ناگهان از دسترس خارج کند. اما نگران نباشید؛ این خطا پایان دنیا نیست، بلکه صرفاً یک “ارتباط ناقص” بین اجزای سرور شماست.
در این مقاله، به صورت عمیق و تخصصی بررسی میکنیم که چرا وبسرور محبوب Nginx این خطا را گزارش میدهد و چگونه میتوانید با یک رویکرد سیستماتیک، آن را برای همیشه حل کنید.
خطای ۵۰۲ Bad Gateway در Nginx چیست؟
خطای ۵۰۲ (Bad Gateway) یک کد وضعیت HTTP است که نشاندهنده یک مشکل در ارتباط بین دو سرور است. در ساختار معمولی وب، وقتی کاربری از طریق مرورگر به وبسایت شما درخواست میفرستد، Nginx به عنوان یک Reverse Proxy یا Load Balancer عمل میکند.
وظیفه Nginx این است که درخواست را دریافت کرده و به یک سرور دیگر (مانند PHP-FPM، Gunicorn، uWSGI یا Node.js) ارسال کند تا آن سرور پردازشهای لازم را انجام داده و پاسخ را برگرداند. خطای ۵۰۲ زمانی رخ میدهد که Nginx درخواست را ارسال میکند، اما پاسخ نامعتبری (Invalid Response) از سرور پشتی (Upstream) دریافت میکند.
به زبان ساده: Nginx سعی میکند با “سرورِ مغز متفکر” صحبت کند، اما پاسخ دریافتی منطقی نیست یا ارتباط به کلی قطع شده است.
تفاوت ۵۰۲، ۵۰۳ و ۵۰۴؛ کدام یک را تجربه میکنید؟
بسیاری از کاربران این سه کد خطا را با هم اشتباه میگیرند، اما در دنیای شبکه، تفاوتهای کلیدی دارند:
- خطای ۵۰۲ (Bad Gateway): سرور واسط (Nginx) پاسخ نامعتبری از سرور بالادستی دریافت کرده است. یعنی ارتباط برقرار شده، اما نتیجه “خراب” است.
- خطای ۵۰۳ (Service Unavailable): سرور موقتاً قادر به پاسخگویی نیست. این معمولاً به دلیل اورلود (Overload) سرور یا انجام عملیات نگهداری (Maintenance) است. سرور زنده است اما “مشغول” است.
- خطای ۵۰۴ (Gateway Timeout): سرور واسط (Nginx) زمان زیادی منتظر پاسخ سرور پشتی مانده و سرور پشتی در زمان تعیین شده پاسخ نداده است. برخلاف ۵۰۲ که پاسخ نامعتبر است، در ۵۰۴ پاسخ “دیر” است.
رایجترین علتهای خطای ۵۰۲ در Nginx
برای رفع مشکل، ابتدا باید بدانید که ریشه خطا کجاست. دلایل متعددی میتوانند منجر به ۵۰۲ شوند:
- کراش کردن سرویس پشتی (Upstream Crash): سرویسی مانند PHP-FPM یا Node.js متوقف شده است.
- پیکربندی اشتباه (Configuration Errors): آدرس IP یا پورت در فایل تنظیمات Nginx (فایل کانفیگ vhost) با پورتِ واقعیِ سرویسِ پشتی همخوانی ندارد.
- محدودیت منابع (Resource Exhaustion): سرور به دلیل مصرف بیش از حد RAM یا CPU، توان پاسخگویی ندارد و ارتباطات را قطع میکند.
- فایروال (Firewall): تنظیمات فایروال (مانند UFW یا iptables) اجازه برقراری ارتباط بین Nginx و سرویس پشتی را نمیدهد.
- خطاهای کدنویسی: در موارد خاص، اگر کدهای سمت سرور شما به درستی اجرا نشوند و خروجی استانداردی تولید نکنند، Nginx ممکن است پاسخ آنها را به عنوان Bad Gateway تفسیر کند.
چطور لاگهای Nginx را بررسی کنیم؟ (بخش حیاتی)
حدس زدن علت خطا وقتگیر است. بهترین راه، بررسی لاگهای اختصاصی Nginx است. این لاگها دقیقاً به شما میگویند مشکل کجاست.
برای دسترسی به لاگهای خطا در سیستمهای مبتنی بر لینوکس (مانند Ubuntu/Debian)، دستور زیر را در ترمینال وارد کنید:

اگر وبسایت شما چندین سایت مختلف دارد، ممکن است لاگ هر سایت در مسیر اختصاصی خودش باشد. به دنبال خطاهایی بگردید که در پایان آنها عبارت upstream prematurely closed connection یا connect() failed دیده میشود. این پیامها سرنخ طلایی شما برای حل مشکل هستند.
چکلیست ۵ مرحلهای رفع خطای ۵۰۲
حالا که میدانیم مشکل چیست و کجا آن را جستجو کنیم، بیایید وارد فاز عملیاتی شویم. این ۵ مرحله را به ترتیب انجام دهید:
۱. سرویس بالادستی (Upstream) را چک کنید
اولین قدم این است که مطمئن شوید سرویس مورد نظر (مثلاً PHP-FPM) در حال اجراست.
- دستور بررسی وضعیت (مثال برای PHP-FPM):

- اگر سرویس متوقف است (dead/inactive)، آن را استارت کنید: sudo systemctl restart php8.x-fpm.
۲. بررسی فایل کانفیگ Nginx
مطمئن شوید که آدرس و پورت در فایل تنظیمات سایت (معمولاً در /etc/nginx/sites-available/) دقیقاً با پورت سرویس شما یکی است.
- به دنبال خط fastcgi_pass یا proxy_pass بگردید.
- اگر تنظیم شده روی پورت ۹۰۰۰، مطمئن شوید سرویس پشتی واقعاً روی پورت ۹۰۰۰ گوش میدهد (netstat -tuln | grep 9000).
۳. بررسی میزان مصرف منابع (RAM/CPU)
گاهی سرور به دلیل اتمام رم (Out of Memory) سرویسهای پشتی را میبندد. با دستور htop یا top وضعیت منابع را چک کنید. اگر رم پر است، ممکن است نیاز به ارتقای سرور یا بهینهسازی دیتابیس داشته باشید.
۴. پاکسازی کش (Cache)
گاهی کشهای سمت سرور (مانند FastCGI Cache یا Redis) دچار تداخل شدهاند. سعی کنید کش را پاک کنید. اگر از پلاگینهای کش وردپرس استفاده میکنید، پوشه کش را از طریق فایل منیجر یا SSH تخلیه کنید.
۵. بازبینی فایروال و امنیت
مطمئن شوید که هیچ قانونی در فایروال، پورتهای داخلی بین Nginx و اپلیکیشن شما را بلاک نکرده باشد. دستور sudo ufw status را چک کنید.
چرا راهحلهای دستی همیشه کافی نیستند؟
راهحلهای دستی (مانند ریستارت کردن سرویسها) همانند مسکن عمل میکنند. اگر خطای ۵۰۲ ناشی از یک مشکل ساختاری (مثلاً ترافیک بالای سایت و ضعف سختافزار) باشد، ریستارت کردن فقط مشکل را برای چند دقیقه حل میکند و دوباره سایت از دسترس خارج میشود.
وقتی صحبت از وبسایتهای تجاری یا پربازدید است، اتکا به روشهای دستی یعنی “خطر همیشگی از دست دادن مشتریان”. شما نیاز به پایداری دارید، نه فقط رفع لحظهای.
راهکار ریشهای برای کاهش خطاهای ۵۰۲
برای اینکه دیگر با خطای ۵۰۲ مواجه نشوید، این استراتژیهای پیشگیرانه را در نظر بگیرید:
- مانیتورینگ ۲۴/۷: از ابزارهایی مثل Zabbix، Prometheus یا سرویسهای آنلاین مثل UptimeRobot استفاده کنید. این ابزارها قبل از اینکه کاربر متوجه خطا شود، به شما اطلاع میدهند.
- تنظیمات Timeout مناسب: گاهی اوقات پاسخ سرور طولانی است اما نمرده است. در فایل کانفیگ Nginx، پارامترهای fastcgi_read_timeout یا proxy_read_timeout را کمی افزایش دهید تا به سرور فرصت پردازش بیشتری بدهید.
- بهینهسازی Queryهای دیتابیس: اکثر خطاهای ۵۰۲ ناشی از کوئریهای سنگین دیتابیس است که باعث قفل شدن پروسسهای PHP میشود. دیتابیس خود را ایندکسگذاری (Index) کنید.
- استفاده از Load Balancer: اگر ترافیک سایت بسیار بالاست، یک سرور کافی نیست. با استفاده از چندین سرور و توزیع بار، فشار از روی تکسرور برداشته میشود.
- محدودسازی کانکشنها (Rate Limiting): از قابلیت limit_req در Nginx استفاده کنید تا از حملات احتمالی یا رباتهایی که سرور را زیر بار میبرند، جلوگیری کنید.
نتیجهگیری
خطای ۵۰۲ Bad Gateway در Nginx اگرچه آزاردهنده است، اما معمولاً نشانه یک مشکل قابل حل در ارتباطات پشت پرده سرور شماست. با داشتن دانش کافی درباره لاگها، وضعیت سرویسهای پشتی و مدیریت منابع، میتوانید این خطا را در چند دقیقه شناسایی و رفع کنید.
به یاد داشته باشید که بهترین مدیر سرور کسی نیست که خطاها را سریع رفع میکند، بلکه کسی است که با مانیتورینگ و بهینهسازی اصولی، اجازه نمیدهد خطاها رخ دهند. اگر هنوز با این خطا دستوپنجه نرم میکنید، پیشنهاد میکنم ابتدا لاگها را با دقت بیشتری مطالعه کنید؛ چرا که پاسخ سوال شما همیشه در فایل /var/log/nginx/error.log نهفته است.
سوالات متداول (FAQ)
۱. آیا خطای ۵۰۲ به سئو سایت من آسیب میزند؟
بله. اگر خطای ۵۰۲ به صورت مداوم رخ دهد و خزندههای گوگل (Googlebot) هنگام بازدید با آن مواجه شوند، گوگل فکر میکند سایت شما در دسترس نیست و در بلندمدت رتبه شما را کاهش میدهد. رفع سریع این خطا برای حفظ رتبه سئو حیاتی است.
۲. اگر بعد از ریستارت سرویس، مشکل ۵۰۲ حل نشد، چه کنم؟
احتمالاً مشکل در تنظیمات فایل کانفیگ Nginx یا تداخل پورتهاست. فایل کانفیگ را با دستور nginx -t تست کنید تا از صحت نوشتاری آن مطمئن شوید.
۳. آیا افزایش رم سرور همیشه ۵۰۲ را حل میکند؟
خیر. افزایش رم فقط در صورتی کمک میکند که علت خطا “کمبود حافظه” باشد. اگر خطا ناشی از کدنویسی بد یا کانفیگ اشتباه باشد، حتی با رم ۱۲۸ گیگابایتی هم مشکل ۵۰۲ را خواهید داشت.
۴. تفاوت اصلی بین ۵۰۲ و ۵۰۴ چیست؟
در ۵۰۲، سرور پاسخ میدهد اما پاسخش نامعتبر است (مثلاً سرویس کراش کرده). در ۵۰۴، سرور هیچ پاسخی در زمان مجاز نمیدهد (تایماوت).
۵. آیا استفاده از Cloudflare میتواند باعث خطای ۵۰۲ شود؟
بله، گاهی اوقات ارتباط بین سرور شما و سرورهای Cloudflare دچار مشکل میشود که در این صورت در مرورگر خطای ۵۰۲ کلودفلر را میبینید. در این شرایط باید تنظیمات SSL و فایروال سرور را بررسی کنید.