رفع مشکل

خطاهای 502، 504 و 52x در CDN؛ تشخیص علت و رفع آن

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۴ دقیقه

502502504CDNرفع مشکلخطاهای 502، 504 و 52xدر CDN؛ تشخیص علت ورفع آنمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

خطاهای 5xx پشت CDN تقریباً همیشه یعنی «لبهٔ CDN نتوانست پاسخ درستی از سرور مبدأ بگیرد». 502 یعنی پاسخ نامعتبر یا اتصال رد شد، 504 و 524 یعنی مبدأ دیر جواب داد، 522 یعنی اتصال به مبدأ برقرار نشد و 520 یعنی مبدأ پاسخ غیرمنتظره داد. اولین قدم همیشه تست مستقیم مبدأ بدون CDN است: اگر مبدأ مستقیم هم خطا می‌دهد، مشکل روی سرور شماست.

کدهای 5xx به زبان ساده

کد نام معنی در پشت CDN محتمل‌ترین علت
500 Internal Server Error خود اپلیکیشن مبدأ خطا داده باگ، خطای PHP/پایتون، دیتابیس
502 Bad Gateway پاسخ نامعتبر از مبدأ یا اتصال رد شد سرویس خاموش، پورت اشتباه، پروسهٔ کرش‌کرده
503 Service Unavailable مبدأ موقتاً در دسترس نیست بار زیاد، حالت تعمیرات، محدودیت نرخ
504 Gateway Timeout مبدأ در زمان مجاز پاسخ نداد کوئری کند، پردازش طولانی
520 Unknown Error پاسخ خالی یا غیرمنتظره از مبدأ کرش پروسه، هدرهای خیلی بزرگ
521 Web Server Is Down مبدأ اتصال را رد کرد وب‌سرور متوقف
522 Connection Timed Out اتصال TCP به مبدأ برقرار نشد فایروال، آی‌پی اشتباه، سرور خاموش
524 A Timeout Occurred اتصال برقرار شد ولی پاسخ دیر آمد درخواست طولانی‌تر از مهلت

کدهای 52x اصطلاحاً توسط برخی CDNها (مثل Cloudflare) تعریف شده‌اند؛ مفهوم مشابه در CDNهای دیگر ممکن است با 502 یا 504 نمایش داده شود.

معنای خطاهای رایج 5xx در CDN
502 / 521مبدأ در دسترس است اما سرویس پاسخ نمی‌دهد یا اتصال را رد می‌کند
522اتصال TCP به مبدأ اصلاً برقرار نمی‌شود
504 / 524اتصال برقرار شده ولی پاسخ دیرتر از مهلت رسیده
520مبدأ پاسخی نامعتبر یا خالی برگردانده
شکل ۱ هر کد، حلقهٔ مشخصی از مسیر لبه تا مبدأ را نشان می‌دهد.

گام اول برای همهٔ خطاها: تست مستقیم مبدأ

# از خود سرور مبدأ
curl -sv http://127.0.0.1:PORT/ -o /dev/null

# از بیرون، مستقیم به آی‌پی مبدأ
curl -sv -H "Host: www.example.com" http://ORIGIN_IP:PORT/ -o /dev/null
  • مبدأ مستقیم هم خطا می‌دهد → مشکل روی سرور شماست (ادامهٔ همین راهنما).
  • مبدأ مستقیم سالم است ولی از CDN خطا → تنظیم آدرس/پورت مبدأ در CDN، فایروال یا محدودیت روی آی‌پی لبه‌ها را بررسی کنید (چک‌لیست بعد از اتصال CDN).
TCPHTTPکوئریلبهٔ CDNفایروال مبدأپورت باز است؟وب‌سرورNginx / برنامهدیتابیسکندی؟TCPHTTPکوئریلبهٔ CDNفایروال مبدأپورت باز است؟وب‌سرورNginx / برنامهدیتابیسکندی؟
شکل ۲ هر جا زنجیره کند شود یا قطع شود، کد خطای متفاوتی در لبه می‌بینید.

رفع 502 و 521: سرویس پاسخ نمی‌دهد

sudo systemctl status nginx          # یا apache2، یا سرویس اپلیکیشن
sudo ss -tlnp | grep -E ':80|:443|:3000'
sudo journalctl -u nginx --since "30 min ago"
sudo tail -n 50 /var/log/nginx/error.log

علت‌های رایج: - پروسهٔ پشت Nginx خاموش است (PHP-FPM، Node، Gunicorn): connect() failed (111: Connection refused) در error.log. - سوکت یا پورت اشتباه در proxy_pass یا fastcgi_pass. - کمبود رم و OOM Killer که پروسه را کشته است: dmesg -T | grep -i oom؛ راهنمای پر شدن رم سرور.

رفع 504 و 524: پاسخ دیر می‌رسد

  • کوئری‌های کند دیتابیس: slow query log را فعال و ایندکس‌های لازم را اضافه کنید.
  • کار طولانی در درخواست وب: کارهایی مثل ساخت گزارش بزرگ یا ارسال ایمیل انبوه را به صف پس‌زمینه منتقل کنید.
  • تایم‌اوت‌های داخلی: proxy_read_timeout در Nginx یا request_terminate_timeout در PHP-FPM را بررسی کنید؛ اما افزایش بی‌حساب تایم‌اوت درمان نیست.
  • منابع ناکافی: اگر load average بالا و steal زیاد است، پلن بزرگ‌تر یا بهینه‌سازی لازم است.

رفع 522: اتصال برقرار نمی‌شود

sudo ufw status verbose
sudo iptables -L -n | head -50
  • پورت مبدأ در فایروال بسته است یا فقط برای آی‌پی‌های خاص باز است.
  • آی‌پی مبدأ در تنظیمات CDN اشتباه است (مثلاً پس از ساخت سرور جدید، آی‌پی قبلی مانده).
  • سرور خاموش یا به‌دلیل اتمام موجودی متوقف شده است.
  • اختلال شبکه بین لبه و مبدأ؛ با mtr از سمت مبدأ بررسی کنید.

رفع 520: پاسخ غیرمنتظره

  • پروسه در میانهٔ پاسخ کرش می‌کند؛ لاگ اپلیکیشن را ببینید.
  • هدرهای پاسخ یا کوکی‌ها بیش از حد بزرگ‌اند.
  • مبدأ اتصال را بدون پاسخ می‌بندد (مثلاً به‌دلیل محدودیت keep-alive یا ماژول امنیتی).

503: سرویس موقتاً در دسترس نیست

  • حالت تعمیرات CMS فعال مانده است.
  • محدودکنندهٔ نرخ (rate limit) روی مبدأ، درخواست‌های لبه را محدود کرده؛ چون همهٔ کاربران از چند آی‌پی لبه می‌آیند، محدودیت بر اساس آی‌پی باید روی هدر آی‌پی واقعی کاربر اعمال شود.
  • سرور زیر بار سنگین است.

پیشگیری

پایش سلامت

یک ابزار پایش (مثل Uptime Kuma روی سرور جدا) نصب کنید تا خطاها را پیش از کاربران ببینید.

ری‌استارت خودکار

سرویس‌ها را با systemd و Restart=always یا restart: unless-stopped در داکر اجرا کنید.

منابع کافی و swap

رم کافی و یک swap کوچک جلوی کشته شدن ناگهانی پروسه‌ها را می‌گیرد.

کش

کش کردن پاسخ‌های ثابت بار مبدأ را کم و احتمال تایم‌اوت را پایین می‌آورد.

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

خطای 502 از CDN است یا سرور من؟

اگر تست مستقیم مبدأ هم خطا بدهد، از سرور شماست. اگر مبدأ مستقیم سالم است، تنظیم اتصال CDN به مبدأ یا فایروال را بررسی کنید.

چرا خطا گاه‌به‌گاه است؟

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

افزایش تایم‌اوت مشکل 504 را حل می‌کند؟

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

کاربران خطا می‌بینند ولی من نه؛ چرا؟

ممکن است از لبه یا مسیر متفاوتی وصل شوند یا شما نسخهٔ کش‌شده را ببینید. زمان، شهر و اپراتور کاربران را جمع‌آوری و با پشتیبانی بررسی کنید.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.