بلاگ ابرفردوسی > آموزش سرور ابری : خطای 502 nginx: راهنمای کامل و سریع رفع ارور Bad Gateway

خطای 502 nginx: راهنمای کامل و سریع رفع ارور Bad Gateway

خطای 502 nginx

وقتی هنگام مدیریت یا بازدید از یک سایت با خطای 502 nginx مواجه می‌شوید، یعنی ارتباط بین وب‌سرور شما و سرورهای بالادستی (Upstream) قطع شده است. این ارور که به‌صورت 502 Bad Gateway نمایش داده می‌شود، یکی از آزاردهنده‌ترین خطاهای سمت سرور است که مستقیماً در دسترس بودن سایت و تجربه کاربران را هدف می‌گیرد. ریشه اصلی بروز این مشکل معمولاً به پاسخ ندادن سرویس‌های پردازشی مثل PHP-FPM، تنظیمات نادرست بافر و تایم‌اوت در انجین‌ایکس، یا تداخل‌های فایروال و CDN برمی‌گردد.

برای حل این مسئله، هم از سمت کاربران عادی (با کارهایی مثل تغییر DNS یا پاک کردن کش) و هم به‌صورت ریشه‌ای از سمت مدیران سرور (با بررسی لاگ‌ها، ری‌استارت سرویس‌ها و بهینه‌سازی کانفیگ) می‌توان اقدام کرد.

در این مقاله از ابر فردوسی، به‌سراغ آموزش عیب‌یابی و ۹ روش عملی برای رفع ارور 502 سایت در لینوکس (اوبونتو و سنت‌او‌اس) و وردپرس می‌رویم تا پایداری سایت خود را در سریع‌ترین زمان ممکن بازیابی کنید.

تشخیص سریع مشکل

خطای nginx 502

وقتی با خطای 502 nginx به‌عنوان یکی از ارورهای رایج وب‌سرور روبرو می‌شوید، باید در کمتر از یک دقیقه بفهمید که آیا مشکل از تجهیزات و مرورگر کاربر (Client) است یا گلوگاهی در سرور و کدهای سایت رخ داده است. این تفکیک هوشمندانه، شما را از سردرگمی نجات می‌دهد و مسیر حل مشکل bad gateway را کوتاه‌تر می‌کند.

اقدامات سمت کاربر

تشخیص منشأ خطای ۵۰۲ در سمت کاربر

اگر به‌عنوان یک بازدیدکننده یا مدیر سایت می‌خواهید مطمئن شوید که مشکل از سمت سیستم شما نیست، اقدامات زیر را به‌ترتیب انجام دهید:

  • صفحه را هارد رفرش کنید:

گاهی اوقات یک نوسان شبکه موقت باعث ثبت خطا شده است. در ویندوز از ترکیب کلیدهای Ctrl + F5 و در مک از Cmd + Shift + R استفاده کنید.

  • کش و کوکی مرورگر را پاک کنید:

احتمال دارد مرورگر شما نسخه خطای قدیمی سایت را کش کرده باشد. تست سایت با حالت ناشناس (Incognito Mode) مرورگر، سریع‌ترین راه برای سنجش این موضوع است.

  • تنظیمات DNS خود را تغییر دهید:

اگر سرورهای DNS ارائه‌دهنده اینترنت شما دچار اختلال شده باشند، ممکن است ارتباط با وب‌سرور قطع شود. موقتاً DNS سیستم خود را روی دی‌ان‌اس‌های عمومی مثل گوگل (8.8.8.8) یا کلودفلر (1.1.1.1) تنظیم کنید.

  • با مدیر سایت تماس بگیرید:

اگر راه‌حل‌های بالا جواب نداد و سایت‌های دیگر بدون مشکل برای شما باز می‌شوند، مأموریت شما تمام شده است؛ رفع ارور 502 سایت باید توسط تیم فنی سرور انجام شود.

اقدامات سمت مدیر سایت

تشخیص منشأ خطای ۵۰۲ در سمت مدیر سایت

به‌عنوان یک وب‌مستر یا مدیر سرور، اگر متوجه شدید سایت برای همه کاربران بالا نمی‌آید، باید بدون اتلاف وقت، فرایند عیب‌یابی را که در ادامه آموزش می‌دهیم روی سرور آغاز کنید:

  • لاگ‌های خطا (Error Logs) را بررسی کنید:

انجین‌ایکس یک وب‌سرور صادق است؛ هر اتفاقی که بیفتد را دقیقاً در لاگ خود یادداشت می‌کند. بررسی فایل error.log اولین و مهم‌ترین پنجره شما برای فهمیدن حقیقت است.

  • وضعیت سرویس پردازشی را بسنجید:

انجین‌ایکس معمولاً خودش کدها را پردازش نمی‌کند، بلکه آن‌ها را به سرویسی مثل PHP-FPM می‌سپارد. باید بررسی کنید که آیا این سرویس فعال است و به همان پورت یا سوکتی که در کانفیگ Nginx سِت‌شده، گوش می‌دهد یا خیر.

  • CDN و فایروال را موقتاً غیرفعال کنید:

سیستم‌های محافظتی مثل کلودفلر، آروان‌کلاود یا فایروال‌های سخت‌افزاری و نرم‌افزاری (مثل CSF یا UFW) درصورت مشاهده درخواست‌های زیاد یا رفتار مشکوک، ممکن است ارتباط بین پروکسی و سرور اصلی را قطع کنند.

علت خطای 502 nginx چیست؟

برای اینکه بتوانید ریشه این اختلال را پیدا کنید، ابتدا باید بدانید علت خطای 502 Bad Gateway چیست و وب‌سرور در چه سناریوهایی این پاسخ را برمی‌گرداند. براساس مستندات رسمی Nginx، زمانی که این وب‌سرور به‌عنوان یک Reverse Proxy عمل می‌کند، اگر نتواند پاسخ معتبری از برنامه‌های پشت‌ سر خود (مانند PHP، پایتون یا دیتابیس) دریافت کند، چاره‌ای جز نمایش این ارور ندارد.

جدول زیر متداول‌ترین دلایل ساختاری را نشان می‌دهد که مشخص می‌کنند چرا سایت خطای 502 می‌دهد:

علت بروز اختلالتوضیح فنی و رفتار سرور
غیرفعال بودن یا کرش PHP-FPMانجین‌ایکس درخواست را می‌فرستد، اما سرویس پردازشی (مثلاً PHP-FPM) خاموش است یا به آدرس کانفیگ‌شده توجه نمی‌کند؛ در نتیجه ارتباط برقرار نمی‌شود.
کمبود بافر و تایم‌اوتپردازش یک اسکریپت یا کوئری بیش‌ازحد طول می‌کشد یا حجم داده‌های پاسخ بیشتر از ظرفیت بافر Nginx است و وب‌سرور رابطه را قطع می‌کند.
تداخل در سیستم کش فعال (APC Cache)فعال بودن سیستم‌های کش قدیمی یا پیکربندی تداخل‌دار مانند APC Cache یا OpCache گاهی باعث خراب شدن پکت‌های ارسالی می‌شود.
اختلال در دیتابیس یا کدهای ماژولارخطاهای عمیق در کدهای سایت (مانند افزونه‌های وردپرس) یا عدم پاسخ‌گویی به موقع پایگاه داده، زنجیره پاسخ را متوقف می‌کند.
مسدودسازی توسط فایروال یا CDNتنظیمات سخت‌گیرانه فایروال سرور یا لایه امنیتی CDN، پکت‌های بازگشتی از سرور اصلی را بلاک می‌کنند و باعث بروز nginx 502 error می‌شوند.
💡 ترفند کاربردی
زمانی که خطای 502 بعداز نصب Nginx رخ می‌دهد، در ۹۰ درصد مواقع مشکل از عدم هماهنگی نوع ارتباط (ساکت یا پورت) بین Nginx و PHP-FPM است. مثلاً انجین‌ایکس منتظر پاسخ روی پورت 9000 است، درحالی‌که PHP دارد روی یک فایل .sock گوش می‌دهد! همیشه این تطابق را در فایل کانفیگ بررسی کنید.

۹ روش عملی برای رفع خطای 502 nginx

وقتی فرایند عیب‌یابی اولیه تمام شد و منشأ حدودی اختلال را پیدا کردید، نوبت به اقدامات فنی و اجرایی می‌رسد. برای رفع خطای 502 bad gateway، مجموعه‌ای از راه‌حل‌های استاندارد وجود دارد که از سیستم کاربر شروع می‌شوند و تا عمیق‌ترین لایه‌های پیکربندی سرور پیش می‌روند. در ادامه این مسیر را به صورت قدم‌به‌قدم طی می‌کنیم تا سایت شما دوباره به وضعیت پایدار بازگردد.

 چک‌لیست خلاصه ۹ روش حل مشکل Bad Gateway

روش ۱- پاک کردن کش مرورگر (سریع‌ترین راهکار)

همان‌طورکه در بخش اول توضیح دادیم، گاهی اوقات سرور مشکل خود را برطرف کرده و به وضعیت عادی برگشته است، اما مرورگر شما همچنان اصرار دارد نسخه ذخیره‌شده (کش) قدیمی که حاوی پنجره خطا بوده را به شما نشان دهد.

  • راهکار کلاینت: برای آزمایش، ابتدا سایت را با حالت ناشناس (Incognito) مرورگر باز کنید. اگر مشکل حل شده بود، کل کش مرورگر را پاک کنید یا از کلیدهای ترکیبی Ctrl + F5 استفاده کنید تا درخواست مستقیماً به سمت وب‌سرور فرستاده شود.

روش ۲- تغییر تنظیمات DNS

یکی از دلایل پنهان در بروز ارور 502 nginx، اختلال در روند ترجمه نام دامنه به آی‌پی سرور است. این اتفاق معمولاً زمانِ جابه‌جایی سرور، تغییر هاست یا وجود رکوردهای خراب در کش دی‌ان‌اس سیستم رخ می‌دهد.

  • پاکسازی کش سیستم: در ویندوز ترمینال (CMD) را باز کرده و دستور ipconfig /flushdns را اجرا کنید.
  • تغییر DNS: دی‌ان‌اس کارت شبکه خود را روی گزینه‌های پایداری مثل کلودفلر (1.1.1.1) یا گوگل (8.8.8.8) تنظیم کنید تا پکت‌های درخواستی بدون لیتنسی و انحراف مسیر به مقصد برسند.

روش ۳- بررسی تنظیمات فایروال

برنامه‌های امنیتی سمت سرور (مانند فایروال‌های UFW، CSF یا لایه‌های امنیتی شبکه) وظیفه دارند جلوی حملات مخرب را بگیرند؛ اما گاهی اوقات همین نگهبان‌ها دچار سوءتفاهم می‌شوند! اگر فایروال درخواست‌های ارسالی از سمت Reverse Proxy (همان انجین‌ایکس) به‌سمت سرویس بالادستی را به‌عنوان یک رفتار مشکوک یا حمله DDoS شناسایی کند، ارتباط را بلاک خواهد کرد.

  • اقدام فنی: اگر از سیستم‌های توزیع محتوا مثل کلودفلر استفاده می‌کنید، مطمئن شوید که رنج‌های آی‌پی این شرکت در فایروال سرور شما وایت‌لیست (Whitelist) شده باشند؛ در غیر این صورت ارتباط پروکسی با سرور اصلی قطع شده و حل مشکل bad gateway غیرممکن می‌شود.

روش ۴- بررسی لاگ‌های خطا (Error Logs)

اگر راه‌حل‌های بالا جواب نداد، دیگر باید تعارف را کنار بگذارید و به‌عنوان مدیر سیستم، مستقیماً به‌سراغ خط فرمان سرور بروید. انجین‌ایکس تمام جزییات قطع ارتباط با پردازشگرها را در لاگ خود می‌نویسد. برای مشاهده جزییات خطا به‌صورت زنده، دستور زیر را در ترمینال لینوکس وارد کنید:

# مشاهده زنده محل لاگ‌های خطای Nginx
sudo tail -f /var/log/nginx/error.log

هنگام بررسی لاگ، اگر با کلماتی مثل “connect() failed (111: Connection refused)” یا “Permission denied” مواجه شدید، مطمئن باشید انجین‌ایکس سالم است اما سرویسی که باید کدها را پردازش کند (مثل پی‌اچ‌پی یا پایتون) یا کاملاً خاموش است یا دسترسی‌های فایل سوکت (Socket Permissions) آن به‌درستی تنظیم نشده است.

روش ۵- ری‌استارت PHP-FPM

در معماری‌های جدید، لایه وب‌سرور و لایه پردازش کد از هم جدا هستند. اگر حجم درخواست‌های ورودی به سایت ناگهان بالا برود و سخت‌افزار سرور زیر فشار قرار گیرد، سرویس مفسر اسکریپت‌ها دچار کمبود منابع می‌شود و اصطلاحاً کرش می‌کند. حل مشکل 502 در سرور لینوکس در بسیاری از مواقع با یک راه‌اندازی مجددِ ساده برای این سرویس برطرف می‌شود.

با توجه به نسخه فعال پی‌اچ‌پی روی سیستم خود (به‌عنوان مثال نسخه مدرن ۸.۵)، دستور مناسب را برای ری‌استارت اجرا کنید:

# ری‌استارت عمومی سرویس پردازشگر پی‌اچ‌پی
sudo systemctl restart php-fpm

# دستور اختصاصی برای سرورهای توزیع دبین و Ubuntu (نسخه 8.5)
sudo systemctl restart php8.5-fpm

پس‌از اجرای این دستور، وضعیت سرویس را با جایگزین کردن کلمه status به‌جای restart بررسی کنید تا مطمئن شوید که لایه پردازشی بدون مشکل فعال شده است.

روش ۶- افزایش زمان اجرای PHP

اگر در وب‌سایت خود اسکریپت‌های سنگینی دارید (مثل خروجی گرفتن از فایل‌های حجیم یا پردازش تصاویر)، ممکن است اجرای آن‌ها بیشتر از حدّ معمول طول بکشد. در این حالت، اگر محدودیت زمان اجرای پی‌اچ‌پی کم باشد، فرایند پردازش متوقف شده و به بروز nginx 502 error منجر می‌شود. برای رفع خطای 502 در PHP-FPM، باید زمان مجاز پردازش را در دو فایل تغییر دهید:

  • گام اول؛ اصلاح فایل php.ini:

این فایل را باز کنید و مقدار max_execution_time را افزایش دهید (مثلاً روی ۳۰۰ ثانیه بگذارید):

max_execution_time = 300
  • گام دوم؛ اصلاح کانفیگ PHP-FPM:

به‌سراغ فایل پیکربندی Pool (معمولاً در مسیر /etc/php/8.x/fpm/pool.d/www.conf) بروید و خط زیر را پیدا کنید و مقدار آن را با php.ini هماهنگ کنید:

request_terminate_timeout = 300
باکس نکته وردپرس – راست‌چین
✨ نکته مهم
بالا بردن بی‌رویه زمان تایم‌اوت اسکریپت‌ها، مثل یک شمشیر دو لبه است. اگر کدهای سایت شما دچار لوپ بی‌پایان یا کوئری‌های خراب باشند، افزایش این زمان باعث می‌شود تمام ورکرها (Workers) سرور درگیر پردازش‌های مرده شوند، رم سرور پر شود و سایت کاملاً بخوابد.

روش ۷- افزایش Buffer و Timeout در Nginx

گاهی اوقات مفسر پی‌اچ‌پی کارش را درست انجام می‌دهد، اما حجم پاسخی (Response) که برای انجین‌ایکس می‌فرستد، بیشتر از ظرفیت بافرهای پیش‌فرض وب‌سرور است. همچنین اگر زمان انتظار انجین‌ایکس برای دریافت پاسخ کم باشد، ارتباط را قطع می‌کند و خطای 502 nginx را نمایش می‌دهد.

برای حل این گلوگاه، فایل کانفیگ اصلی انجین‌ایکس (nginx.conf) یا بلوک سرور سایت خود را باز کنید و جزییات زیر را درون بلاک http یا server اضافه کنید:

http {
	# افزایش ظرفیت بافر برای دریافت پکت‌های بزرگ
	proxy_buffer_size 128k;
	proxy_buffers 4 256k;
	proxy_busy_buffers_size 256k;
	
	# افزایش زمان انتظار انجین‌ایکس برای پاسخ سرور بالادستی
	proxy_connect_timeout 600;
	proxy_read_timeout 600;
	proxy_send_timeout 600;
}

پس‌از ذخیره فایل، حتماً با دستور sudo nginx -t سلامت سینتکس را بررسی کنید و سپس با sudo systemctl restart nginx وب‌سرور را ری‌استارت کنید.

روش ۸- غیرفعال کردن سیستم کش (APC Cache)

در سرورهای لینوکسی قدیمی‌تر یا ساختارهایی که از اکستنشن‌های کش لایه کد مانند APC Cache استفاده می‌کنند، یک تداخل کوچک در آپ‌کدها (Opcodes) کافی است تا کل فرایند مفسر کرش کند. اگر پس‌از تغییر تایم‌اوت‌ها همچنان با ارور ۵۰۲ مواجه می‌شوید، موقتاً این سیستم کش را غیرفعال کنید.

  • نحوه انجام کار: وارد پوشه کانفیگ‌های پی‌اچ‌پی (پوشه conf.d) شوید، فایل مرتبط با apc.ini را باز کنید و مقدار apc.enabled را برابر با 0 قرار دهید. در ساختارهای جدیدتر، تداخل در سیستم OpCache نیز با خالی‌کردن کش آن (ازطریق ابزارهای خط فرمان یا ری‌استارت FPM) به حل مشکل bad gateway کمک می‌کند.

روش ۹- بررسی افزونه‌ها و تم‌ها (برای وردپرس)

اگر دقیقاً درحال تلاش برای رفع ارور 502 در وردپرس هستید، این احتمال وجود دارد که کدهای یکی از افزونه‌ها یا قالب سایت شما با نسخه جدید PHP ناسازگار باشد یا پس‌از یک به‌روزرسانی ناقص، وارد لوپ پردازشی شده باشد. ازآنجاکه در زمان بروز خطای ۵۰۲ دسترسی به پیشخوان وردپرس غیرممکن است، باید ازطریق ترمینال یا FTP اقدام کنید:

  • تست سریع افزونه‌ها:

ازطریق ترمینال به مسیر wp-content بروید. با دستور زیر نام پوشه پلاگین‌ها را تغییر دهید:

mv plugins plugins_old

اگر سایت بالا آمد، یعنی قطعاً یکی از افزونه‌ها عامل خرابکاری بوده است. پوشه را به نام اصلی برگردانید و این‌بار افزونه‌ها را تک‌تک غیرفعال کنید تا متهم اصلی را بیابید.

  • تست قالب سایت:

به همین ترتیب، با رفتن به پوشه themes و تغییر نام قالب فعال، وردپرس را مجبور کنید به قالب پیش‌فرض سوییچ کند تا وضعیت پایداری کدهای پوسته مشخص شود.

رفع ارور 502 در وردپرس

اگر سایت شما با محبوب‌ترین سیستم مدیریت محتوای جهان، یعنی WordPress راه‌اندازی شده و اکنون پشت سد انجین‌ایکس گیر کرده است، فرایند رفع ارور 502 در وردپرس کمی صبوری فنی می‌طلبد. در این اکوسیستم، کدهای سنگین، تداخل‌های نرم‌افزاری یا کمبود حافظه پردازشی در لایه PHP، فاکتورهای اصلی قطع ارتباط انجین‌ایکس با سرورهای بالادستی هستند. برای حل این مشکل، گام‌های زیر را به ترتیب اولویت بررسی کنید:

۱- غیرفعال کردن افزونه‌ها به‌صورت دستی

افزونه‌های امنیتی، سئو یا پلاگین‌های سنگین فروشگاهی (مثل ووکامرس) اگر در پردازش یک درخواست وارد لوپ یا خطای Fatal شوند، فورا مفسر PHP-FPM را با کرش مواجه می‌کنند.

  • راهکار: ازآنجاکه به پیشخوان دسترسی ندارید، وارد مدیریت فایل سرور یا FTP شوید، نام پوشه wp-content/plugins را موقتاً تغییر دهید (مثلاً به plugins_old). اگر سایت بالا آمد، یک پوشه جدید به نام plugins بسازید و افزونه‌ها را تک‌تک از پوشه قدیمی به پوشه جدید منتقل کنید تا پلاگین خرابکار شناسایی شود.

۲- بررسی قالب (تم) وردپرس

گاهی اوقات آپدیت خودکار وردپرس یا تداخل کدهای فایل functions.php با نسخه PHP سرور، عامل اصلی بروز خطای 502 nginx است.

  • راهکار: به پوشه wp-content/themes بروید و نام پوشه قالب فعال خود را تغییر دهید. بااین‌کار، وردپرس به‌طور خودکار به‌سراغ قالب‌های پیش‌فرض خود (مثل Twenty Twenty-Four) می‌رود. اگر مشکل حل شد، کدهای قالب شما نیاز به بازبینی و دیباگ دارند.

۳- افزایش محدودیت حافظه وردپرس

وردپرس به‌صورت پیش‌فرض سقف مشخصی از رم سرور را به هر پردازش اختصاص می‌دهد. اگر این مقدار برای اجرای کدهای سایت شما کم باشد، فرایند پردازش متوقف می‌شود و وب‌سرور خطای باد گیت‌وی می‌دهد.

  • راهکار: فایل wp-config.php را در روت سایت خود باز کنید و تکه کد زیر را دقیقاً قبل‌از خط /* That’s all, stop editing! Happy publishing. */ قرار دهید تا سقف حافظه به ۲۵۶ مگابایت افزایش یابد:
define( 'WP_MEMORY_LIMIT', '256M' );
💡 ترفند کاربردی
بزرگ‌ترین اشتباه برخی وبلاگ‌های آموزشی، پیشنهاد دست‌کاری فایل .htaccess برای وب‌سرور انجین‌ایکس است! به‌عنوان یک متخصص باید بدانید که انجین‌ایکس اصلاً فایل .htaccess را نمی‌شناسد و آن را پردازش نمی‌کند. 

برای عیب‌یابی این بخش، ابتدا ساختار معماری سرور خود را بسنجید:

۱. اگر Nginx وب‌سرور اصلی و مستقل شما است: بررسی فایل .htaccess کاملاً بی‌معنی است. در این سناریو باید قوانین ری‌رایت را مستقیماً در فایل کانفیگ بلوک سرور انجین‌ایکس (Nginx Rewrite Rules) بررسی و بهینه‌سازی کنید.

۲. اگر Nginx به‌عنوان Reverse Proxy جلوی Apache قرار دارد: در این حالت، آپاچی فایل .htaccess را پردازش می‌کند. اگر یک قانون خراب یا تداخل کد در .htaccess وجود داشته باشد، آپاچی کرش می‌کند و انجین‌ایکس لایه جلو، خطای ۵۰۲ را به کاربر نشان می‌دهد. در این سناریو، تغییر نام موقت فایل .htaccess به .htaccess_old راهکار درستی برای تست است.

رفع خطای 502 nginx در سرور لینوکس (Ubuntu/CentOS)

اگر به‌عنوان مدیر زیرساخت وظیفه دارید که مشکل 502 در سرور لینوکس را مدیریت کنید، باید بدانید که رفتار وب‌سرور در توزیع‌های مختلف لینوکسی ممکن است به‌دلیل تفاوت در مدیریت پکیج‌ها و سرویس‌ها کمی متفاوت باشد. در ادامه، دستورات استاندارد برای دو توزیع محبوب اوبونتو و سنت‌او‌اس را بررسی می‌کنیم.

گام‌های عملیاتی در اوبونتو (Ubuntu)

در سیستم‌های مبتنی بر دبیان و اوبونتو، پکیج‌ها به طور مداوم آپدیت می‌شوند. برای بازگرداندن پایداری و رفع خطای Bad Gateway در Ubuntu، ابتدا مخازن را به‌روزرسانی کنید و سپس وضعیت سلامت سرویس انجین‌ایکس را ارزیابی کنید:

باکس کد
# به‌روزرسانی لیست پکیج‌ها و مخازن اوبونتو
sudo apt update
 
# بررسی وضعیت زنده بودن و پایداری وب‌سرور Nginx
sudo systemctl status nginx
 
# راه‌اندازی مجدد وب‌سرور برای اعمال تغییرات لایه کانفیگ
sudo systemctl restart nginx
باکس نکته وردپرس – راست‌چین
✨ نکته مهم
اگر وضعیت سرویس را failed دیدید، قبل‌از ری‌استارت، خروجی دستور sudo nginx -t را چک کنید تا مطمئن شوید اشتباه تایپی در فایل‌های پیکربندی وجود ندارد.

گام‌های عملیاتی در سنت‌او‌اس (CentOS)

در توزیع‌های ردیف سازمانی و سیستم‌های مبتنی بر RHEL مانند CentOS، مدیریت پکیج‌ها برعهده ابزار yum یا dnf است. برای رفع اختلال، فرایند زیر را در خط فرمان سرور مجازی خود جلو ببرید:

# به‌روزرسانی مخازن و پکیج‌های سیستم‌عامل CentOS
sudo yum update
 
# ارزیابی وضعیت کارکرد و رفتارهای انجین‌ایکس
sudo systemctl status nginx
 
# ری‌استارت و راه‌اندازی مجدد سرویس انجین‌ایکس
sudo systemctl restart nginx

درضمن، در سیستم‌عامل CentOS، یک عامل پنهان برای خطای ۵۰۲ وجود دارد به نام SELinux (سیستم امنیتی لایه هسته). اگر SELinux فعال باشد، ممکن است اجازه ندهد انجین‌ایکس ازطریق شبکه یا سوکت به PHP-FPM متصل شود. اگر بعداز ری‌استارت انجین‌ایکس همچنان ارور پابرجا بود، با دستور sudo setsebool -P httpd_can_network_connect 1 به وب‌سرور اجازه دسترسی به شبکه بالادستی را صادر کنید.

وقتی راه‌حل‌ها جواب نمی‌دهد

اگر تمام ۹ روش بالا، از بهینه‌سازی بافر انجین‌ایکس و افزایش تایم‌اوت پی‌اچ‌پی تا عیب‌یابی کدهای وردپرس را موبه‌مو اجرا کردید اما همچنان با خطای 502 nginx مواجه می‌شوید، مشکل از دانش فنی یا کانفیگ شما نیست. احتمالا در این حالت، معماری هاست یا سرور فعلی شما دیگر کشش ترافیک و حجم پردازش‌ها را ندارد. وقتی منابع زیرساخت شما محدود باشد، رفتارهای زیر به طور دایمی چرخه خطای 502 را تکرار می‌کنند:

به‌محض اینکه چند کاربر هم‌زمان وارد سایت شوند، فرایندهای PHP-FPM به‌دلیل اتمام حافظه RAM سرور، توسط هسته لینوکس مسدود (Kill) و ری‌استارت می‌شوند. انجین‌ایکس هیچ پاسخی دریافت نمی‌کند و ارور ۵۰۲ بالا می‌آید.

  1. اشباع پردازنده (CPU Overload):

پردازش اسکریپت‌های سنگین دیتابیس، پردازنده را به ۱۰۰ درصد مصرف می‌رساند. صف انتظار طولانی می‌شود و درخواست‌ها به حدّ تایم‌اوت می‌رسند.

  1. پهنای باند و تأخیر دیتاسنتر:

نوسان در شبکه بین پروکسی و سرور اصلی، ارتباط پایدار Upstream را قطع می‌کند.

  1. کندی دیتابیس:

استفاده از هاردهای قدیمی به‌جای NVMe سرعت خواندن و نوشتن دیتابیس را کند می‌کند و انجین‌ایکس را منتظر نگه می‌دارد.

راهکار ریشه‌ای؛ ارتقا به بستر پایدار سرور ابری

برای اینکه یک‌بار برای همیشه از شر قطعی‌های مکرر و ارورهای لایه سرور خلاص شوید، مناسب‌ترین گزینه، مهاجرت به زیرساخت مقیاس‌پذیر سرور ابری است. در یک بستر ابری استاندارد، منابع کاملاً ایزوله و اختصاصی هستند و با نوسان ورودی کاربران، سایت شما با کرش‌های ناگهانی روبرو نمی‌شود.

در جدول زیر، نحوه حل ریشه‌ای گلوگاه‌های خطای ۵۰۲ را در ساختار سرورهای ابری ابر فردوسی بررسی کرده‌ایم:

ویژگی زیرساخت ابری ابر فردوسیچطور مشکل ارور ۵۰۲ را دایمی حل می‌کند؟
سخت‌افزار پرچمدار و مدرن (HPE)بهره‌گیری از قدرتمندترین پردازنده‌های Intel Xeon و AMD EPYC همراه با رم‌های DDR4 و هاردهای فوق‌سریع NVMe، سرعت پردازش کدهای PHP و دیتابیس را بالا می‌برد و ریسک تایم‌اوت انجین‌ایکس را به صفر می‌رساند.
مقیاس‌پذیری فوری منابعاگر کمپین تبلیغاتی دارید یا ترافیک سایت ناگهان ۱۰ برابر شود، می‌توانید در لحظه و بدون ثانیه‌ای قطعی، منابع رم و سی‌پی‌یو سرور را افزایش دهید تا جلوی کرش PHP-FPM گرفته شود.
فایروال و مانیتورینگ پیشرفتهترافیک‌های مخرب و فیک (DDoS) که وب‌سرور را فلج می‌کنند، قبل‌از رسیدن به سیستم‌عامل، در لایه شبکه دیتاسنتر توسط فایروال‌های ابری مسدود می‌شوند.
بازارچه ابری و تحویل آنیوب‌سرور انجین‌ایکس، انواع کنترل‌پنل‌ها (سی‌پنل، دایرکت‌ادمین، پلسک) و پشته‌های نرم‌افزاری (WordPress, Docker, Django) با کانفیگ‌های بهینه و تست‌شده، با یک کلیک و بدون اشتباهات دستی روی سرور شما مستقر می‌شوند.
سیستم پرداخت ساعتیشما فقط به اندازه ثانیه‌ها و ساعت‌هایی که سرور ابری روشن است هزینه می‌پردازید. درصورت خاموش کردن سرور، هزینه‌ای بابت CPU و RAM کسر نخواهد شد.

ابر فردوسی برای دوری از ریسک مالی، ۱۰۰ هزارتومان اعتبار رایگان به شما اختصاص می‌دهد. شما می‌توانید ابتدا کیفیت زیرساخت، هماهنگی انجین‌ایکس با کدهایتان و پایداری آپتایم را کاملاً رایگان بسنجید، با کلید API فرآیندهای بکاپ‌گیری و اتوماسیون هوشمند شبکه را تست کنید و سپس با تضمین ۱۰۰ درصدی بازگشت وجه زیرساخت کسب‌وکارتان را دایمی کنید.

سرور ابری

جمع‌بندی

خطای 502 nginx یک بن‌بست نیست؛ سیگنالی واضح از سمت وب‌سرور است که می‌گوید زنجیره انتقال داده در یک جا قطع‌شده است. در این راهنما آموختیم که چطور با فلاش کردن دی‌ان‌اس و پاکسازی کش مرورگر شانس خود را در لایه کلاینت امتحان کنیم و اگر مشکل پا برجا بود، چطور با مانیتورینگ زنده error.log، بهینه‌سازی پارامترهای بافر انجین‌ایکس و ری‌استارت هوشمند PHP-FPM پایداری را به لایه سرور برگردانیم. اما به یاد داشته باشید که کانفیگ نرم‌افزاری، تنها زمانی معجزه می‌کند که سخت‌افزار سرور شما زیر بار ترافیک به مرز خفگی نرسیده باشد.

حالا شما برای ما بنویسید: آیا هنگام بررسی لاگ‌های انجین‌ایکس با خطای کمبود حافظه یا تداخل سیستم‌های کش مواجه شده‌اید؟ کدام یک از روش‌های ۹گانه بالا سایت شما را نجات داد؟ چالش‌های خود را در بخش نظرات با ما به اشتراک بگذارید تا با هم آن‌ها را دیباگ کنیم.

منابع:
Developer.mozilla | digitalocean | nginx | wpbeginner | linuxify | aws.amazon

 سؤالات متداول

خطای 502 Bad Gateway دقیقاً یعنی چه و آیا به کاربر مربوط است یا سرور؟

این خطا کاملاً یک اختلال سمت سرور (Server-Side) است. وقتی این ارور را می‌بینید، یعنی وب‌سرور لایه جلو (Nginx) به‌عنوان یک دروازه یا پروکسی عمل می‌کند، اما زمانی‌که درخواست را به سرورهای بالادستی (مثل PHP-FPM، پایتون یا هاست اصلی) فرستاده، پاسخ نامعتبر یا گنگی دریافت کرده است. جز در موارد نادر (مثل خرابی کش یا دی‌ان‌اس مرورگر کلاینت)، کاربر هیچ نقشی در بروز آن ندارد.

چرا بعداز نصب Nginx خطای 502 می‌گیرم؟

خطای 502 بعد از نصب Nginx تقریباً همیشه به‌دلیل عدم هماهنگی مسیر ارتباطی وب‌سرور و
اگر در فایل کانفیگ انجین‌ایکس (بلاک location ~ \.php$) تنظیم کرده‌اید که درخواست‌ها به پورت مثلاً 127.0.0.1:9000 فرستاده شوند، اما سرویس PHP-FPM شما روی یک فایل سوکت لینوکسی (مثل unix:/var/run/php/php8.3-fpm.sock) تنظیم شده باشد، این دو لایه زبان هم را نمی‌فهمند و با ارور ۵۰۲ مواجه می‌شوید. برای رفع آن باید هر دو فایل پیکربندی را باز کنید و این مسیر پورت یا سوکت را دقیقاً یکسان کنید.مفسر کد است. انجین‌ایکس باید بداند کدهای شما را به کجا بفرستد.

فرق خطای 502 با خطاهای 500 و 504 چیست؟

تفاوت این خطاها در رفتار و وضعیت پردازش سرور است:
خطای 500 (Internal Server Error): مشکل کاملاً داخلی است؛ وب‌سرور به پردازشگر وصل شده اما کدهای برنامه (مثلاً به‌دلیل غلط املایی در کدهای وردپرس یا دیتابیس) کرش کرده‌اند.
خطای 502 (Bad Gateway): وب‌سرور کار می‌کند اما سرویس پشت سر آن (Upstream) پاسخ خراب یا نامفهومی به وب‌سرور برگردانده یا اصلاً خاموش است.
خطای 504 (Gateway Timeout): لایه پردازش کد بیدار است اما آن‌قدر پردازش یک دستور را طولانی کرده که مهلت زمان انتظار وب‌سرور (Timeout) تمام شده است.

چطور بفهمم مشکل از PHP-FPM است یا از خود وب‌سرور Nginx؟

سریع‌ترین راه، اجرای دستور بررسی وضعیت سرویس‌ها در ترمینال لینوکس است:
sudo systemctl status php8.x-fpm
اگر وضعیت سرویس را inactive یا failed دیدید، یعنی مفسر پی‌اچ‌پي کرش کرده و انجین‌ایکس تقصیری ندارد. اما اگر سرویس روشن بود، باید به‌سراغ فایل sudo tail -f /var/log/nginx/error.log بروید. وجود پیام Connection refused یعنی انجین‌ایکس پورت یا سوکت اشتباهی را صدا می‌زند.

چرا با زیاد شدن ترافیک سایت، خطای 502 nginx بیشتر می‌شود؟

این حالت نشان‌دهنده کمبود شدید منابع سخت‌افزاری (رم و سی‌پی‌یو) است. با بالا رفتن تعداد کاربران، تعداد درخواست‌های هم‌زمان افزایش می‌یابد. اگر رم سرور شما پر شود، لینوکس برای نجات سیستم، فرایندهای سنگین مفسر (PHP Workers) را مسدود یا Kill می‌کند. در این لحظه انجین‌ایکس چون فرآیند پردازشی را پیدا نمی‌کند، بلافاصله به کاربران خطای ۵۰۲ نشان می‌دهد. اگر بهینه‌سازی تایم‌اوت‌ها در این سناریو جواب نداد، زمان مهاجرت به یک زیرساخت مقیاس‌پذیر فرارسیده است.

آیا فایروال یا CDN هم می‌تواند علت خطای 502 Bad Gateway باشد؟

بله، سیستم‌های امنیتی و شبکه‌های توزیع محتوا (CDN) مثل کلودفلر یا آروان‌کلاود به‌عنوان یک واسطه بین کاربر و سرور شما قرار می‌گیرند. اگر فایروال سرور شما (مثل CSF یا UFW) آی‌پي‌های فرستاده‌شده از سمت CDN را به عنوان ربات یا حمله شناسایی و مسدود کند، ارتباط CDN با وب‌سرور قطع می‌شود و کلودفلر پنجره اختصاصی خطای ۵۰۲ خود را به کاربران نشان می‌دهد. همیشه رنج آی‌پی‌های ارائه‌دهنده CDN خود را در فایروال سرور وایت‌لیست کنید.

یاسین اسدی

اگه می‌خوای زندگیت تغیر کنه کتاب نخون؛ نوشته‌های منو بخون!
پست های مرتبط

آموزش اتصال هارد به سرور لینوکس

پر شدن ناگهانی فضای ذخیره‌سازی، یکی از دغدغه‌های همیشگی در مدیریت زیرساخت است و در چنین شرایطی، اضافه کردن یک دیسک جدید سریع‌ترین راهکار محسوب می‌شود. بااین‌حال، بسیاری از ادمین‌ها هنگام اجرای این فرایند با چالش‌هایی مثل…

۱۷ مرداد ۱۴۰۵

خطای 504 کلودفلر؛ آموزش کامل رفع ارور 504 Gateway Timeout

مواجه شدن با خطای 504 کلودفلر (Cloudflare 504 Error) به این معنی است که شبکه توزیع محتوا (CDN) زمان زیادی را منتظر پاسخ سرور شما مانده و در نهایت منصرف شده است. این وضعیت که با نام…

۱۷ مرداد ۱۴۰۵

آموزش آپلود پروژه پایتون روی سرور ابری (Nginx، Flask و…)

بسیاری از توسعه‌دهندگان پس‌از اتمام کدنویسی در محیط لوکال، با این چالش مواجه می‌شوند که چگونه کدهای خود را به یک محیط عملیاتی پایدار منتقل کنند. فرایند آپلود پروژه پایتون روی سرور برخلاف اجرای محلی، نیازمند پیکربندی…

۱۷ مرداد ۱۴۰۵
0 0 رای ها
به مقاله امتیاز بدید
0 نظرات