دسته بندی:

رفع مشکل عدم نمایش دامنه در سی پنل و WHM

رفع مشکل عدم نمایش دامنه در سی پنل و WHM

حدود ۸ دقیقه مطالعه

وارد WHM می‌شوید، اکانت در فهرست List Accounts هست اما ستون دامنه خالی نمایش داده می‌شود؛ یا کاربر وارد سی پنل می‌شود و در بخش Domains هیچ دامنه‌ای نمی‌بیند. گاهی هم سایت به‌جای محتوای خودش صفحه پیش‌فرض سرور را برمی‌گرداند. در همه این حالت‌ها معمولاً اکانت پاک نشده است؛ زنجیره‌ای که نام دامنه را به نام کاربری و سپس به کانفیگ آپاچی وصل می‌کند در یک نقطه شکسته است. مشکل عدم نمایش دامنه در سی پنل یکی از مواردی است که وبمسترها را با دردسر مواجه می‌کند و در بیشتر موارد با بازسازی درست همین زنجیره حل می‌شود.

دامنه در سی پنل از کجا خوانده می‌شود

پیش از اجرای هر دستوری بهتر است بدانید اطلاعات دامنه در سی پنل از کجا می‌آید، چون همین موضوع تعیین می‌کند کدام فایل را باید اصلاح کنید و کدام فایل خودش دوباره ساخته می‌شود:

  • منبع اصلی: فایل /var/cpanel/users/USERNAME و پوشه /var/cpanel/userdata/USERNAME/. مشخصات واقعی اکانت و دامنه‌هایش اینجاست.
  • فایل‌های نگاشت که ساخته می‌شوند: /etc/trueuserdomains و /etc/userdomains. این دو فایل خروجی مرحله قبل هستند.
  • کانفیگ آپاچی که ساخته می‌شود: httpd.conf که ویرچوال هاست هر یوزر در آن قرار می‌گیرد.

نکته مهمی که در بیشتر آموزش‌های قدیمی گفته نمی‌شود این است: فایل‌های /etc/userdomains و /etc/trueuserdomains و httpd.conf فایل‌های تولیدشده هستند. اگر آن‌ها را دستی ویرایش کنید، مشکل موقتاً حل می‌شود اما در اولین بازسازی خودکار دوباره به حالت قبل برمی‌گردد. اصلاح باید در منبع انجام شود و بعد فایل‌های خروجی دوباره ساخته شوند.

پیش‌نیازها و کارهایی که قبل از شروع باید انجام دهید

  • دسترسی root از طریق SSH به سرور. این کارها از داخل سی پنل کاربر قابل انجام نیست.
  • مطمئن شوید اکانت Suspend نشده باشد؛ اکانت تعلیق‌شده رفتار متفاوتی دارد و راه‌حلش صرفاً Unsuspend است.
  • فضای دیسک و inode را بررسی کنید. پر شدن پارتیشن، رایج‌ترین علت خالی یا ناقص شدن فایل‌های /var/cpanel است.
  • قبل از هر تغییری از فایل‌های نگاشت نسخه پشتیبان بگیرید.

دو دستور اول برای بررسی فضا و inode:

df -h
df -i

و برای گرفتن نسخه پشتیبان:

cp -a /etc/userdomains /root/userdomains.bak
cp -a /etc/trueuserdomains /root/trueuserdomains.bak
cp -a /var/cpanel/users/USERNAME /root/USERNAME.bak

به جای USERNAME نام کاربری خود را جایگزین کنید. همین جایگزینی در همه دستورهای بعدی این مقاله هم لازم است.

مسیرهایی که باید بررسی کنید

اگر نام دامین شما در سی پنل نمایش داده نمی‌شود و یا نام دامنه خالی است، مسیرهای زیر را چک کنید و مطمئن شوید دامنه در آن‌ها موجود است:

/etc/trueuserdomains
/etc/userdomains
/var/cpanel/users/USERNAME
/etc/apache2/conf/httpd.conf

۱ و ۲ — فایل‌های trueuserdomains و userdomains

در این دو فایل باید خطی مانند زیر وجود داشته باشد:

domain.com: username

domain.com نام دامنه و username نام کاربری اکانت است. تفاوت این دو فایل را بدانید: /etc/trueuserdomains فقط دامنه اصلی هر اکانت را نگه می‌دارد، اما /etc/userdomains همه دامنه‌ها شامل دامنه اصلی، Addon، دامنه‌های پارک‌شده (که در نسخه‌های جدید سی پنل با نام Aliases شناخته می‌شوند) و ساب‌دامنه‌ها را فهرست می‌کند. برای جست‌وجوی سریع:

grep -w 'domain.com' /etc/userdomains /etc/trueuserdomains

اگر دامنه در /etc/userdomains نبود ولی در /var/cpanel/users/ بود، مشکل صرفاً قدیمی بودن نگاشت است و با دستور بازسازی حل می‌شود. اگر در هیچ‌کدام نبود، مشکل عمیق‌تر است و باید فایل کاربر را بررسی کنید.

۳ — فایل /var/cpanel/users/USERNAME

این فایل را چک کرده و مطمئن شوید خطوط زیر موجود است:

DNS=domain.com
USER=username
IP=ipaddress
OWNER=root(or reseller owner)

این خطوط به ترتیب شامل نام دامنه، نام کاربری، IP و مالک یا نماینده مالک یوزر است. از صحیح بودن این ۴ خط مطمئن شوید. دامنه‌های اضافی اکانت هم معمولاً با کلیدهایی مثل DNS1 و DNS2 در همین فایل ثبت می‌شوند.

دو نکته که زیاد نادیده گرفته می‌شود: اگر مقدار IP با IP واقعی سرور یا با IP اختصاصی اکانت یکی نباشد، ویرچوال هاست روی آدرسی ساخته می‌شود که سرور به آن گوش نمی‌دهد. و اگر مقدار OWNER اشتباه باشد، اکانت زیر مجموعه ریسلر دیگری می‌رود و برای شما اصلاً نمایش داده نمی‌شود — دقیقاً همان حس «دامنه ناپدید شده».

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

ls -l /var/cpanel/userdata/USERNAME/
cat /var/cpanel/userdata/USERNAME/main
grep -R 'domain.com' /var/cpanel/userdata/

۴ — فایل httpd.conf

فایل آخر یا همان httpd.conf دربردارنده تنظیمات آپاچی هر یوزر است، بنابراین یوزر مورد نظر باید در این فایل تنظیمات صحیح و مشابه سایر اکانت‌ها داشته باشد.

مسیر این فایل بسته به نسخه EasyApache فرق می‌کند و این نکته در مقالات قدیمی معمولاً اشتباه است:

  • EasyApache 4 (حالت فعلی همه سرورهای پشتیبانی‌شده): /etc/apache2/conf/httpd.conf
  • EasyApache 3 (منسوخ، فقط روی سرورهای خیلی قدیمی): /usr/local/apache/conf/httpd.conf

توجه کنید که این مسیر EasyApache است و ربطی به ساختار پیش‌فرض آپاچی روی دبیان یا اوبونتو (با sites-available و sites-enabled) ندارد؛ روی سرور سی پنل، صرف‌نظر از توزیع، همان ساختار EasyApache برقرار است.

مهم‌تر اینکه این فایل را دستی ویرایش نکنید. هر تغییری در آن با اولین بازسازی از بین می‌رود. اگر برای دامنه‌ای دایرکتیو اختصاصی لازم دارید، آن را در فایل include مربوط به همان دامنه بگذارید:

/etc/apache2/conf.d/userdata/std/2_4/USERNAME/domain.com/custom.conf
/etc/apache2/conf.d/userdata/ssl/2_4/USERNAME/domain.com/custom.conf

و بعد از ساخت یا ویرایش این فایل‌ها:

/scripts/ensure_vhost_includes --user=USERNAME

این دستور خودش کانفیگ را دوباره می‌سازد و آپاچی را ری‌استارت می‌کند، بنابراین اگر دایرکتیو اشتباهی در فایل include گذاشته باشید آپاچی بالا نمی‌آید. پیش از اجرای آن حتماً یک بار apachectl configtest بگیرید.

ترتیب درست دستورهای بازسازی

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

/scripts/updateuserdomains
/scripts/rebuildhttpdconf

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

/usr/sbin/httpd -t

اگر /usr/sbin/httpd روی سرور شما وجود نداشت (نام باینری آپاچی روی همه توزیع‌ها یکسان نیست)، همین تست را با دستور زیر بگیرید که خروجی یکسانی دارد:

apachectl configtest

اگر خروجی Syntax OK بود، آپاچی را ری‌استارت کنید:

/scripts/restartsrv_httpd

چند نکته درباره این دستورها:

  • مسیر /scripts در واقع یک symlink به /usr/local/cpanel/scripts است. اگر /scripts پیدا نشد، مسیر کامل را استفاده کنید؛ مثلاً /usr/local/cpanel/scripts/updateuserdomains.
  • روش‌های قدیمی ری‌استارت یعنی service httpd restart و /etc/init.d/httpd restart منسوخ شده‌اند. معادل امروزی آن‌ها systemctl restart httpd است (نام سرویس بسته به توزیع می‌تواند فرق کند)، ولی روی سرور سی پنل بهتر است از /scripts/restartsrv_httpd استفاده کنید چون سرویس‌های وابسته و مانیتورینگ داخلی سی پنل را هم درست مدیریت می‌کند.
  • اگر بعد از تغییرات، خود کنترل پنل هنوز اطلاعات قدیمی نشان می‌دهد، سرویس سی پنل را هم ری‌استارت کنید: /scripts/restartsrv_cpsrvd

چطور مطمئن شوید مشکل حل شده است

بعد از بازسازی، به‌جای اینکه فقط WHM را رفرش کنید، این سه بررسی را انجام دهید:

grep -w 'domain.com' /etc/userdomains /etc/trueuserdomains
/usr/sbin/httpd -S | grep 'domain.com'
whmapi1 listaccts | grep -i 'domain.com'

دستور دوم فهرست کامل ویرچوال هاست‌های فعال آپاچی را چاپ می‌کند (اگر مسیر باینری فرق داشت، apachectl -S همان خروجی را می‌دهد)؛ اگر دامنه اینجا با IP و مسیر درست دیده شود، آپاچی آن را می‌شناسد. در پایان سایت را در مرورگر و ترجیحاً در حالت ناشناس باز کنید تا کش مرورگر گمراهتان نکند.

مشکلات رایجی که همین علائم را می‌سازند

  • پر بودن دیسک یا inode: نوشتن در /var/cpanel بی‌سروصدا شکست می‌خورد و فایل کاربر ناقص یا صفربایت می‌شود. اول df -h و df -i، بعد هر کار دیگر.
  • ریستور اکانت از بکاپ: بعد از انتقال یا ریستور، گاهی نگاشت‌ها به‌روز نمی‌شوند. اجرای updateuserdomains معمولاً کافی است.
  • اشتباه بودن OWNER: اکانت زیر ریسلر دیگری می‌افتد و در فهرست شما دیده نمی‌شود. بهترین راه اصلاح، تغییر مالک از داخل WHM است (بخش Modify an Account یا Modify Account Owner)؛ اگر ناچار شدید مقدار OWNER را مستقیم در /var/cpanel/users/USERNAME اصلاح کنید، حتماً اول از فایل کپی بگیرید و بعد دستورهای بازسازی را اجرا کنید.
  • دایرکتیوهای منسوخ آپاچی ۲.۲: اگر کانفیگ یا .htaccess را از سروری قدیمی منتقل کرده‌اید، دستورهای Order allow,deny و Allow from all و Deny from all متعلق به آپاچی ۲.۲ هستند. EasyApache 4 فقط آپاچی ۲.۴ دارد و این دستورها بدون ماژول mod_access_compat پذیرفته نمی‌شوند؛ نتیجه‌اش خطای ۴۰۳ یا بالا نیامدن آپاچی و در نتیجه از دسترس خارج شدن دامنه است. در آپاچی ۲.۴ به‌جای Allow from all باید Require all granted و به‌جای Deny from all باید Require all denied بنویسید؛ خود Order معادل مستقیمی ندارد و حذف می‌شود. برای محدود کردن به IP خاص هم Require ip 1.2.3.4 جایگزین Allow from 1.2.3.4 است.
  • نبودن زون DNS: اگر دامنه در سی پنل هست ولی در DNS Zone Manager نیست، مشکل جای دیگری است و بازسازی httpd.conf آن را حل نمی‌کند؛ باید زون دامنه را بررسی یا بازسازی کنید.
  • مشکل لایسنس: اگر هیچ اکانتی در WHM نمایش داده نمی‌شود، احتمالاً موضوع یک دامنه خاص نیست. لایسنس را با /usr/local/cpanel/cpkeyclt دوباره از سرور cPanel بگیرید؛ این دستور لایسنس را به‌روزرسانی می‌کند و در همان خروجی معلوم می‌شود که مشکل از لایسنس است یا نه.
  • سیستم‌عامل منسوخ: نسخه‌های امروزی سی پنل روی CentOS 6 و ۷ که به پایان پشتیبانی رسیده‌اند اجرا نمی‌شوند. سرورهای فعلی معمولاً روی AlmaLinux، Rocky Linux، CloudLinux یا نسخه‌های LTS اوبونتو هستند و مسیرهای گفته‌شده در این مقاله روی همه آن‌ها یکسان است.

چه زمانی این کارها را انجام ندهید

  • اگر روی httpd.conf تغییرات دستی دارید که هنوز به فایل‌های include منتقل نشده‌اند، اجرای rebuildhttpdconf آن‌ها را پاک می‌کند. اول یک کپی بگیرید و تغییرات را به مسیر conf.d/userdata منتقل کنید.
  • اگر اکانت عمداً حذف یا Terminate شده است، ساختن دستی خط در /etc/userdomains راه‌حل نیست و فقط وضعیت را ناسازگار می‌کند؛ اکانت را از بکاپ ریستور کنید.
  • در ساعات اوج ترافیک، ری‌استارت آپاچی را بدون گرفتن خروجی httpd -t انجام ندهید. یک خطای نحوی در کانفیگ می‌تواند همه سایت‌های سرور را هم‌زمان از دسترس خارج کند.
  • این مسیرها مخصوص سی پنل و WHM هستند. روی دایرکت ادمین ساختار فایل‌ها کاملاً متفاوت است و اجرای این دستورها آنجا معنایی ندارد.

برای مشاهده آموزش نصب cpanel به لینک زیر مراجعه نمایید

اموزش نصب cpanel

آموزش‌های مرتبط

ارسال نظر