ساخت virtualhost در اوبونتو

در این آموزش نحوه ساخت 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 های جدید، قادر خواهید بود تا چندین وب سایت را بر روی کامپیوتر خود میزبانی کنید.

موفق و پیروز باشید…

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

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