۵۰۳ Backend Fetch Failed در Nginx/Apache با Varnish

خطای ۵۰۳ Backend Fetch Failed یکی از رایج ترین ارورها است. به خصوص که هنگامی که Varnish Cache در کنار وب سرورهایی مانند Nginx یا Apache می بینید. این خطا معمولا وقتی که Varnish قادر به دریافت پاسخی معتبر از سرور بک اند (Backend Server) نباشد. در این مقاله اسپاد سرور به طور کامل علت بروز این خطا، روش های شناسایی، و راهکارهای رفع آن را بررسی می کنیم. همچنین نحوه پیکربندی صحیح cache و تنظیمات backend connection را گام به گام توضیح خواهیم داد.
خطای ۵۰۳ Backend Fetch Failed چیست؟
این یعنی این که Varnish تلاش کرده. و محتوایی را از سرور اصلی (Backend) دریافت کند. اما به دلیل مشکلات مختلف موفق به این کار نشده. در نتیجه، Varnish یک پاسخ ۵۰۳ Service Unavailable به کاربر برمی گرداند.
نمونه پیام خطا:
Error 503 Backend Fetch Failed
Backend Fetch Failed
Guru Meditation:
XID: 123456
دلایل اصلی بروز خطای ۵۰۳ در Varnish
برای رفع مشکل باید ابتدا دلیل بروز آن را شناسایی کنیم. مهم ترین علل عبارتند از:
- Timeout در ارتباط با بک اند
وقتی پاسخ دهی سرور بک اند بیشتر از مقدار تعریف شده در Varnish طول بکشد. و درخواست شکست می خورد. - پیکربندی نادرست آدرس بک اند در Varnish
استفاده از IP یا نام دامنه اشتباه در backend باعث ایجاد این خطا می شود. - مشکلات منابع سرور بک اند
اگر CPU یا RAM سرور بک اند پر شده باشد، ممکن است نتواند به درخواست های Varnish پاسخ دهد. - فیلتر شدن ترافیک توسط فایروال یا تنظیمات امنیتی
برخی فایروال ها یا ماژول های امنیتی مانند mod_security ممکن است ترافیک Varnish را بلاک کنند. - بسته بودن پورت ارتباطی بک اند
اگر پورت تعریف شده در Varnish برای دسترسی به بک اند باز نباشد، ارتباط قطع می شود.
اگر نیاز به راهنمایی برای خرید هاست اقتصادی و دامنه و سرور مجازی دارید، متخصصان با تجربه اسپاد سرور آماده خدمت به شما هستند. برای تماس با ما، روی “تماس با اسپاد سرور” کلیک کنید.
بررسی و رفع مشکل مرحله به مرحله
در ادامه به بررسی مرحله به مرحله رفع خطای ۵۰۳ Backend Fetch Failed در Nginx/Apache با Varnish می پردازیم.
۱. بررسی لاگ ها برای رفع خطای ۵۰۳ Backend Fetch Failed
اولین قدم برای رفع این خطا، بررسی لاگ های Varnish و وب سرور است.
# مشاهده لاگ های Varnish
varnishlog
# مشاهده لاگ های Nginx
tail -f /var/log/nginx/error.log
# مشاهده لاگ های Apache
tail -f /var/log/apache2/error.log
با بررسی این لاگ ها می توانید متوجه شوید که خطا در کدام بخش رخ داده است.
۲. بررسی پیکربندی Backend در Varnish
در فایل پیکربندی Varnish (معمولا /etc/varnish/default.vcl) بخش backend را چک کنید:
backend default {
.host = “127.0.0.1”;
.port = “8080”;
.first_byte_timeout = 300s;
.connect_timeout = 60s;
.between_bytes_timeout = 60s;
}
- host: آدرس IP یا دامنه صحیح سرور بک اند.
- port: پورتی که وب سرور روی آن در حال سرویس دهی است.
- timeout ها: بهتر است مقادیر first_byte_timeout و connect_timeout را افزایش دهید تا در صورت تاخیر در پاسخ دهی، خطا رخ ندهد.
۳. تست ارتباط مستقیم با Backend برای رفع خطای خطای ۵۰۳ Backend Fetch Failed
برای اطمینان از اینکه بک اند در دسترس است:
curl -I http://127.0.0.1:8080
اگر پاسخ HTTP 200 دریافت نکردید، مشکل از بک اند است نه از Varnish.
۴. افزایش Timeout در Varnish و وب سرور
گاهی درخواست ها به دلیل کم بودن مقدار Timeout قطع می شوند. برای رفع این مشکل:
- در Varnish:
.first_byte_timeout = 300s;
.connect_timeout = 60s;
- در Nginx:
proxy_read_timeout 300;
proxy_connect_timeout 60;
proxy_send_timeout 300;
- در Apache:
Timeout 300
ProxyTimeout 300
۵. بررسی منابع سرور برای رفع خطای ۵۰۳ Backend Fetch Failed
برای اطمینان از اینکه سرور بک اند منابع کافی دارد:
top
free -m
df -h
- اگر RAM یا CPU در ۱۰۰% مصرف باشد، باید بهینه سازی انجام دهید یا منابع را ارتقا دهید.
- پاکسازی کش و حذف فایل های اضافی نیز کمک می کند.
۶.اطمینان از باز بودن پورت برای رفع خطای ۵۰۳ Backend Fetch Failed
اگر بک اند روی پورت خاصی اجرا می شود، مطمئن شوید که آن پورت باز است:
netstat -tulpn | grep 8080
یا در صورت استفاده از فایروال:
ufw allow 8080/tcp
۷.غیرفعال کردن موقت ماژول های امنیتی
برخی ماژول ها مانند mod_security ممکن است ترافیک Varnish را مسدود کنند. برای تست، موقتا آن ها را غیرفعال کنید. و سپس مجدد فعال کنید.
بهینه سازی Cache برای جلوگیری از خطا
یکی از بهترین روش ها برای جلوگیری از بروز مجدد این خطا، پیکربندی صحیح کش در Varnish است.
نمونه پیکربندی:
sub vcl_backend_response {
set beresp.ttl = 10m;
set beresp.grace = 5m;
}
- ttl: مدت زمان ذخیره شدن پاسخ در کش.
- grace: مدت زمانی که Varnish حتی با انقضای کش، پاسخ را سرو می کند تا بک اند پاسخ دهد.
مانیتورینگ و پیشگیری
برای جلوگیری از بروز دوباره خطای ۵۰۳:
- مانیتورینگ دائمی با ابزارهایی مثل Zabbix یا Grafana.
- هشدار ایمیلی هنگام افزایش مصرف منابع.
- تست منظم عملکرد بک اند با اسکریپت های اتوماتیک.
جمع بندی
خطای ۵۰۳ Backend Fetch Failed در Varnish اغلب به دلیل مشکلات ارتباطی با سرور بک اند یا تنظیمات اشتباه رخ می دهد. با بررسی دقیق لاگ ها، پیکربندی backend، افزایش timeout، بهینه سازی کش و رفع مشکلات منابع سرور قادر به رفع مشکل هستید.
رعایت این نکات باعث پایداری بدون مشکل Varnish، ترافیک وب سایت شما را مدیریت کند. و یوزر پایانی هیچگاه ارور نبیند.