خطای شبکه Apache AH00072: make_sock: could not bind to address

مقدمه

خطای Apache AH00072: make_sock: could not bind to address زمانی رخ می‌دهد که وب‌سرور Apache نتواند روی آدرس IP یا پورتی که در فایل‌های پیکربندی تعریف شده است، گوش دهد (Bind شود). این مشکل معمولاً هنگام راه‌اندازی یا ری‌استارت سرویس Apache مشاهده می‌شود و باعث می‌شود سرویس به درستی اجرا نشود.

این خطا اغلب به یکی از دلایل زیر رخ می‌دهد:

  • پورت موردنظر قبلاً توسط برنامه دیگری اشغال شده است.
  • آدرس IP تعریف‌شده روی سرور وجود ندارد.
  • چند VirtualHost یا سرویس مختلف از یک پورت و IP مشابه استفاده می‌کنند.
  • فایل‌های پیکربندی Apache دارای تنظیمات نادرست هستند.
  • سرویس دیگری مانند Nginx، LiteSpeed یا Apache دوم روی همان پورت فعال است.

در این آموزش یاد می‌گیرید چگونه علت این خطا را پیدا کرده و آن را برطرف کنید.


مشاهده خطا

معمولاً هنگام بررسی وضعیت سرویس Apache با دستور زیر، خطا مشاهده می‌شود:

sudo systemctl status apache2

یا در توزیع‌های مبتنی بر CentOS:

sudo systemctl status httpd

نمونه خروجی:

AH00072: make_sock: could not bind to address [::]:80
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs

این پیام نشان می‌دهد Apache نتوانسته روی پورت 80 گوش دهد.


علت اول: اشغال بودن پورت

رایج‌ترین دلیل بروز این خطا، اشغال بودن پورت توسط سرویس دیگری است.

برای بررسی اینکه چه برنامه‌ای از پورت 80 استفاده می‌کند، دستور زیر را اجرا کنید:

sudo ss -tulpn | grep :80

یا:

sudo lsof -i :80

نمونه خروجی:

nginx  1234 root  6u  IPv4  12345  TCP *:80 (LISTEN)

در این مثال، سرویس Nginx روی پورت 80 فعال است و مانع اجرای Apache می‌شود.

راه‌حل

اگر به Nginx نیاز ندارید:

sudo systemctl stop nginx
sudo systemctl disable nginx

سپس Apache را مجدداً راه‌اندازی کنید:

sudo systemctl restart apache2

علت دوم: تعریف آدرس IP اشتباه

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

نمونه تنظیم اشتباه:

Listen 192.168.1.100:80

در صورتی که این IP روی سرور فعال نباشد، Apache قادر به Bind شدن نخواهد بود.

بررسی IPهای سرور

ip addr show

یا:

hostname -I

راه‌حل

تنظیم Listen را به حالت عمومی تغییر دهید:

Listen 80

یا از IP صحیح استفاده کنید.

پس از ویرایش:

sudo apachectl configtest

اگر خروجی زیر نمایش داده شد:

Syntax OK

تنظیمات صحیح هستند.


علت سوم: وجود چند Listen مشابه

گاهی چند فایل پیکربندی مختلف یک پورت را چند بار تعریف می‌کنند.

برای بررسی:

grep -R "Listen" /etc/apache2/

یا:

grep -R "Listen" /etc/httpd/

نمونه مشکل:

Listen 80
Listen 80

یا:

Listen 0.0.0.0:80
Listen *:80

راه‌حل

تنها یک تعریف معتبر برای پورت باقی بگذارید:

Listen 80

علت چهارم: تنظیمات اشتباه VirtualHost

برخی اوقات VirtualHost روی IP یا پورتی تنظیم می‌شود که در سرور وجود ندارد.

نمونه:

<VirtualHost 10.10.10.10:80>

در حالی که این IP روی سرور تعریف نشده است.

راه‌حل

استفاده از:

<VirtualHost *:80>

یا IP واقعی سرور.


علت پنجم: اجرای هم‌زمان چند نمونه Apache

در برخی موارد ممکن است یک نسخه دیگر از Apache از قبل در حال اجرا باشد.

برای بررسی:

ps aux | grep apache

یا:

ps aux | grep httpd

در صورت وجود پردازش‌های اضافی:

sudo kill -9 PID

سپس:

sudo systemctl restart apache2

بررسی لاگ‌های Apache

برای مشاهده جزئیات بیشتر خطا:

در Ubuntu و Debian:

sudo journalctl -u apache2

یا:

sudo tail -f /var/log/apache2/error.log

در CentOS و AlmaLinux:

sudo tail -f /var/log/httpd/error_log

تست نهایی پیکربندی

قبل از هر بار ری‌استارت Apache، بهتر است تنظیمات را بررسی کنید:

sudo apachectl configtest

خروجی صحیح:

Syntax OK

سپس:

sudo systemctl restart apache2

جمع‌بندی

خطای AH00072: make_sock: could not bind to address نشان می‌دهد Apache قادر به اتصال به آدرس IP یا پورت مشخص‌شده نیست. در اکثر مواقع، دلیل اصلی اشغال بودن پورت توسط سرویس دیگری مانند Nginx یا تعریف اشتباه IP در فایل‌های پیکربندی است. با بررسی پورت‌های فعال، تنظیمات Listen، VirtualHostها و لاگ‌های Apache می‌توانید به سرعت علت مشکل را شناسایی و برطرف کنید.

از همراهی شما با پارمین کلود سپاسگزاریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *