رفع مشکل عدم نمایش دامنه در سی پنل و 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 هستند. روی دایرکت ادمین ساختار فایلها کاملاً متفاوت است و اجرای این دستورها آنجا معنایی ندارد.
ارسال نظر