بازگشت به مجله
مدیریت سایتتیم فنی هایوهاست۹ دقیقه مطالعه

رفع خطاهای ۵۰۲، ۵۰۳ و ۵۰۴ در سایت

این خطاها خودشان مشکل نیستند، نشانه اند. با شناخت تفاوتشان مستقیم سراغ علت درست بروید به جای حدس زدن.

رفع خطا

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

1

این سه خطا دقیقا چه میگویند

هر سه خطا از خانواده خطاهای سمت سرور هستند اما علت متفاوتی دارند. تشخیص درست همینجا شروع میشود و اگر این تفاوت را بدانید، نیمی از مسیر عیب یابی را رفته اید.

زنجیره درخواست از مرورگر تا پایگاه داده و اینکه هر کدام از خطاهای ۵۰۲، ۵۰۳ و ۵۰۴ از کجا می آیند
وب سرور کد خطا را برمیگرداند، اما علت تقریبا همیشه در سرویس پشتی است.
  • خطای ۵۰۲: وب سرور نتوانست پاسخ معتبری از سرویس پشتی بگیرد؛ معمولا آن سرویس متوقف شده است.
  • خطای ۵۰۳: سرویس موقتا در دسترس نیست؛ معمولا ظرفیت پر شده یا حالت تعمیر فعال است.
  • خطای ۵۰۴: اتصال برقرار شد اما پاسخ در مهلت مقرر نرسید؛ یعنی پردازش طول کشیده است.
2

اولین جایی که باید نگاه کنید

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

آخرین خطاهای وب سرور
sudo tail -n 100 /var/log/nginx/error.log
sudo tail -n 100 /var/log/apache2/error.log
وضعیت سرویس ها
sudo systemctl status nginx
sudo systemctl status php8.3-fpm
لاگ سیستمی سرویس
sudo journalctl -u nginx -n 50 --no-pager
3

علت رایج خطای ۵۰۲

در بیشتر موارد سرویس پشتی متوقف شده است. اگر سایت شما با پی اچ پی کار میکند، معمولا سرویس PHP-FPM از کار افتاده یا سوکت آن در دسترس نیست.

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

بررسی وجود و مسیر سوکت
ls -l /run/php/
sudo systemctl restart php8.3-fpm
4

علت رایج خطای ۵۰۴

این خطا یعنی درخواست بیش از حد انتظار طول کشیده است. افزایش مهلت زمانی راه حل سریعی است اما مشکل اصلی را پنهان میکند؛ بهتر است اول ببینید چرا پردازش این قدر طول میکشد.

علت های رایج: کوئری سنگین در پایگاه داده، فراخوانی یک سرویس بیرونی که پاسخ نمیدهد، یا عملیات سنگینی مثل ساخت پشتیبان که در زمان درخواست کاربر اجرا میشود.

افزایش مهلت در Nginx در صورت نیاز واقعی
fastcgi_read_timeout 120s;
proxy_read_timeout 120s;
بررسی کوئری های کند در مای اس کیو ال
SHOW FULL PROCESSLIST;
5

علت رایج خطای ۵۰۳

این خطا معمولا یعنی ظرفیت پردازش تمام شده است. اگر در لاگ پیامی درباره رسیدن به سقف تعداد پردازش ها دیدید، همین است.

افزایش این سقف تنها وقتی درست است که حافظه کافی داشته باشید. اگر بدون توجه به حافظه آن را زیاد کنید، سرور وارد استفاده از swap میشود و وضعیت بدتر از قبل خواهد شد.

6

راه حل موقت در برابر راه حل واقعی

ری استارت سرویس تقریبا همیشه سایت را برمیگرداند و همین باعث میشود بسیاری آن را راه حل بدانند. اما اگر علت پر شدن ظرفیت یا نشت حافظه باشد، چند ساعت بعد دوباره تکرار میشود.

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

  • اگر خطا در ساعت مشخصی تکرار میشود، سراغ کرون جاب ها بروید.
  • اگر با افزایش ترافیک همزمان است، مشکل ظرفیت است.
  • اگر بعد از مدتی کارکرد رخ میدهد، احتمال نشت حافظه را بررسی کنید.

پرسش های پرتکرار

تفاوت خطای ۵۰۲ و ۵۰۴ چیست؟

در خطای ۵۰۲ وب سرور پاسخی نامعتبر از سرویس پشتی گرفته یا اصلا نتوانسته به آن وصل شود. در خطای ۵۰۴ اتصال برقرار شده اما سرویس پشتی در مهلت تعیین شده پاسخ نداده است.

خطای bad gateway یعنی سرور خراب شده است؟

معمولا نه. در بیشتر موارد وب سرور سالم است اما سرویسی که پشت آن قرار دارد، مثل PHP-FPM، متوقف شده یا ظرفیتش پر شده است. بررسی وضعیت آن سرویس اولین قدم است.

چرا سایت فقط گاهی این خطا را میدهد؟

خطای متناوب معمولا نشانه پر شدن ظرفیت در ساعت های شلوغ است. یعنی تعداد درخواست های همزمان از تعداد پردازش هایی که سرویس پشتی میتواند اجرا کند بیشتر میشود.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه