مقدمه
خطای cannot bind socket در HAProxy زمانی رخ میدهد که:
- یک پروسهی دیگر از همان IP و پورت استفاده میکند.
- یا HAProxy تلاش میکند به یک IP که روی سیستم وجود ندارد متصل شود.
این خطاها از سمت سیستمعامل (Linux) میآیند:
- EADDRINUSE → پورت قبلاً توسط برنامهای دیگر استفاده شده
- EADDRNOTAVAIL → IP مورد نظر روی سیستم وجود ندارد
با این حال، هر دو حالت یک پیام خطای یکسان در HAProxy ایجاد میکنند، بنابراین برای عیبیابی باید وضعیت پورتها و IPها را بررسی کنید.
مرحله ۱: بررسی با systemctl
اولین قدم بررسی وضعیت HAProxy است:
sudo systemctl status haproxy.service -l --no-pager
اگر خطا وجود داشته باشد، خروجی چیزی شبیه این خواهد بود:
cannot bind socket [0.0.0.0:80]
این یعنی HAProxy نتوانسته روی پورت 80 برای همه IPها اجرا شود.
اگر اطلاعات کامل نبود (مثلاً در Ubuntu)، باید از journalctl استفاده کنید.
مرحله ۲: بررسی لاگها با journalctl
sudo journalctl -u haproxy.service --since today --no-pager
در خروجی به دنبال این خط بگردید:
cannot bind socket [0.0.0.0:80]
cannot bind socket [:::80]
0.0.0.0:80→ همه IPv4:::80→ همه IPv6
مرحله ۳: پیدا کردن برنامهای که پورت را گرفته (ss و ps)
برای دیدن اینکه چه برنامهای پورت را گرفته:
sudo ss -4 -tlnp | grep 80
نمونه خروجی:
LISTEN ... 0.0.0.0:80 ... users:(("nginx",pid=40))
یعنی nginx روی پورت 80 اجراست.
برای دیدن جزئیات:
sudo ps -p 40
راهحلها:
- توقف سرویس مزاحم:
sudo systemctl stop nginx
- تغییر پورت nginx یا HAProxy
- یا اجرای HAProxy روی پورت دیگر (مثلاً 8080)
بررسی IPv6 (در صورت نیاز)
sudo ss -6 -tlnp | grep 80
مرحله ۴: بررسی IPهای سیستم (ip command)
اگر هیچ برنامهای پورت را نگرفته بود، مشکل احتمالاً IP است:
sudo ip -4 -c address show
و برای IPv6:
sudo ip -6 -c address show
اگر IP مورد استفاده در HAProxy در این لیست نبود → خطا از نوع EADDRNOTAVAIL است.
اصلاح کانفیگ HAProxy
فایل زیر را ویرایش کنید:
/etc/haproxy/haproxy.cfg
مثلاً:
❌ اشتباه:
bind 198.51.100.123:80
✅ درست:
bind 198.51.100.1:80
ریستارت HAProxy
sudo systemctl restart haproxy.service
بررسی وضعیت:
sudo systemctl status haproxy.service
اگر درست شده باشد:
Active: active (running)
جمعبندی
برای رفع خطای cannot bind socket:
- با
systemctlوضعیت را چک کن - با
journalctlجزئیات خطا را ببین - با
ssوpsبررسی کن چه برنامهای پورت را گرفته - با
ipمطمئن شو IP معتبر است - کانفیگ HAProxy را اصلاح کن
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران