در این آموزش نحوه ساخت virtualhost و تعیین مسیری در home directory کاربر به عنوان دایرکتوری فرا فراخواهیم گرفت. در واقع می خواهیم ضمن ساخت یک هاست مجازی، مسیر پیشفرض آپاچی را هم تغییر دهیم. مطالب این آموزش بر روی سیستم عامل Ubuntu انجام شده اند.
[divider]
ساخت virtualhost
ابتدا باید در پوشه sites-available مربوط به آپاچی که در مسیر /etc/apache2/ قرار دارد می رویم و یک فایل با پسوند conf برای virtualhost جدید ایجاد کنیم. میتوانیم از کد زیر برای ایجاد فایل کمک بگیریم:
sudo gedit /etc/apache2/sites-available/test.conf
سپس کدهای زیر را در آن کپی کنیم.
<VirtualHost *:80> ServerAdmin info@test ServerName test.dev ServerAlias www.test.dev DocumentRoot /var/www/your-host-directory/ ErrorLog ${APACHE_LOG_DIR}/test-error.log CustomLog ${APACHE_LOG_DIR}/test-access.log combined </VirtualHost>
در قطعه کد بالا ServerName نامی است که با آن می توانیم به virtualhost دسترسی داشته باشیم و همانطور که به نظر می رسد، DocumentRoot مسیر Root مربوط به این هاست مجازی را تعیین می کند.
ErrorLog و CustomLog نیز برای ثبت خطاهای رخ داده در virtualhost و نیز ثبت Log های دیگر به کار می روند و باید مسیر فایل های آنها در شاخه پیشفرض آپاچی باشد.
پس از وارد کردن اطلاعات بالا فایل را ذخیره می کنیم.
[divider]
فعالسازی
برای فعال کردن virtualhost جدید دستور زیر را در ترمینال وارد می کنیم:
a2ensite test
در دستور بالا باید نامی که برای ServerName در فایل مربوط به virtualhost انتخاب کرده ایم را وارد کنیم.
برای غیر فعال کردن نیز از دستور a2dissite به جای a2ensite استفاده می کنیم.
چنانچه آدرس DocumentRoot را در مسیری غیر از مسیر پیش فرض آپاچی که /var/www/html/ است، تعریف کنیم؛ هنگام مشاهده سایت با خطای ۴۰۳ مواجه می شویم. در این حالت باید فایل تنظیمات virtualhost را با دستور زیر باز کنیم:
sudo gedit /etc/apache2/sites-available/test.conf
و در قسمت پایانی کد زیر را بیافزاییم:
<Directory /var/www/your-host-directory> #Options FollowSymLinks Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted Allow from all </Directory>
در واقع باید فایل test.conf درنهایت حاوی اطلاعات زیر باشد:
<VirtualHost *:80> ServerAdmin info@test ServerName test ServerAlias test DocumentRoot /var/www/your-host-direcory/ ErrorLog ${APACHE_LOG_DIR}/test-error.log CustomLog ${APACHE_LOG_DIR}/test-access.log combined <Directory /var/www/your-host-directory> #Options FollowSymLinks Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted Allow from all </Directory> </VirtualHost>
در انتها باید به کمک دستور زیر سرویس apache را راه اندازی مجدد کنیم تا تغییرات جدید اعمال شوند.
sudo service apache2 restart
اگر بدون هیچ خطایی بتونید سرویس apache را راه اندازی مجدد کنید، یعنی تنظیمات را بدرستی انجام داده اید. حال در مرورگر خود آدرس ۱۲۷٫۰٫۰٫۵ را وارد کنید. اگر با خطای ۴۰۳ یاهمان Forbidden مواجه شدید، به این معناست که آپاچی امکان دسترسی به پوشه مربوطه را ندارد. بطور معمول آپاچی با نام کاربری www-data سعی در دسترسی به محتوای هاستها دارد. اگر این کاربر مجاز به مشاهده محتوای هاستها نباشد، خطای ۴۰۳ نمایان میشود. در نتیجه باید دستور زیر را برای دادن این دسترسی وارد کنید:
chown -R www-data:www-data /var/www/your-host-directory chmod -R 775 /var/www/your-hos-directory
دستور اول مالکیت فایل ها و پوشه ها را به کاربر www-data میدهد و دستور دوم امکان اجرا، خواندن و نوشتن را برای کاربر، کاربران همگروهش و دیگران تنظیم میکند. البته دستور دوم بهتر است برای فایلهای کد مقدار ۶۴۴ و برای پوشهها مقدار ۷۷۵ باشد. برای فایلهای استاتیک مانند cssها و jsها نیز امکان خواندن کافیست. اما معمولا این نوع فایلها نیز مقدار ۷۷۵ میگیرند.
روش فوق روش ساده ای به نظر می رسد اما همیشه کارآمد نخواهد بود. فرض کنید کاربر جاری سیستم، برای مثال کاربری با نام user باید در این فرایند بجای www-data قرار بگیرد. برای اینکار باید تنظیمات آپاچی را باز کرده و مقدار کلیدهای User و Group را به نام کاربری دلخواه تغییر دهید.
sudo nano /etc/apache2/apache.conf
پس از اعمال تغییرات بالا، باید سرویس آپاچی را مجدد راهاندازی کنید تا تنظیمات جدید اعمال شد. برای اینکار از دستور زیر استفاده کنید:
sudo service apache2 restart
حال آپاچی برای دسترسی به تمام virtualhost ها از کاربر جدید(در مثال ما user) استفاده خواهد کرد. در نتیجه باید با توجه به توضیحاتی که قبلا داده شده، مالکیت و دسترسی دایرکتوریها را به کاربر جدید بدهید.
در مواقعی لازم است که هر virtualhost با کاربری خاص اجرا شود. برای اینکار نیاز به نصب ماژولهای واسط داریم. برای آگاهی بیشتر در این زمینه میتوانید مقاله اجرای آپاچی با دسترسی user را مطالعه کنید.
[divider]
دسترسی به virtualhost با نام مستعار
برای مواقعی که در حال توسعه وب سایت بر روی سیستم شخصی خود هستیم، اگر بخواهیم با وارد کردن عبارت test.dev و یا هر نام دلخواه دیگری، در مرورگر خود به virtualhost برویم باید فایل hosts را ویرایش کنیم. برای اینکار دستور زیر را در ترمینال وارد کنید:
sudo gedit /etc/hosts
سپس کد زیر را به آن اضافه کنید:
۱۲۷٫۰٫۰٫۱ test.dev
حال اگر در مرورگر خود عبارت test.dev را وارد کنید و enter بزنید، می توانید وارد شوید.
[divider]
لیست Virtualhost ها
برای مشاهده لیست virtualhost ها و اطلاع از نام و آی پی مورد استفاده هر کدام از آنها تنها کافیست تا دستور زیر را در ترمینال وارد کنید:
sudo apache2ctl -S
با تکرار مراحل ذکر شده در این آموزش و تعیین نام ها و آی پی های دیگر برای virtualhost های جدید، قادر خواهید بود تا چندین وب سایت را بر روی کامپیوتر خود میزبانی کنید.
موفق و پیروز باشید…