پیکربندی Virtual Host در Apache – تنظیم Name-Based VH

Apache نام وب سرور متن باز است که همراه با php و mysql در تمامی سیستم های عامل قابل نصب می باشد و بستری را برای میزبانی صفحه های وب فراهم می کند. سروری که روی آن LAMP نصب و دارای یک کارت شبکه باشد به طور معمول می تواند یک وب سایت را میزبانی کند. اما اگر بخواهید سرور شما چندین سایت را پاسخ گو باشد، باید از Virtual Host ها استفاده کنید. پیکربندی Virtual Host ها که از این پس VH گفته می شود به دو صورت: مبتنی بر آدرس و یا مبتنی بر نام انجام می شود.

VH مبتنی بر آدرس IP :

فرض کنید می خواهید دو وب سایت را روی یک سرور میزبانی کنید. در حالت IP-Based Virtual Host برای هر کدام از این سایت ها نیاز به یک کارت شبکه است که در کل دو کارت شبکه لازم می باشد. در این صورت برای دسترسی به محتوای هر کدام آدرس کارت شبکه ای که آن صفحه وب را میزبانی می کند را در مرورگر تایپ می کنیم. بطور مثال سایت falearn.ir بر روی آدرس 192.168.1.100 و سایت falearn.org بر روی آدرس 192.168.1.102 از درون شبکه محلی قابل دسترسی هستند. تغییرات لازم در فایل httpd.conf صورت می پذیرد.

VH مبتنی بر نام (Name) :

Name-Based Virtual Host ها از یک کارت شبکه برای دسترسی به چندین وب سایت استفاده می کنند. در این حالت وقتی وب سرور آپاچی درخواستی را دریافت می کند به hostname در HTTP Header آن نگاه می کند و وابسته به hostname، وب سایت متفاوتی را نشان می دهد. لازمه پیکربندی این نوع VH داشتن یک کارت شبکه و همچنین یک DNS Server برای تعریف و نگاست نام سایت (همنام به hostname در HTTP Header) به آدرس همان کارت شبکه است. فرض کنید دو سایت falearn.ir و falearn.org را می خواهید بر روی یک کارت شبکه به آدرس 192.168.1.100 میزبانی کنید. پس لازم است تغییرات را در فایل httpd.conf انجام دهید و همچنین در رکورد از نوع A که آدرس IP یکسان دارند اما نام DNS ای متفاوت (یعنی همان falearn.ir و falearn.org) را در zone file وارد کنید. (zone file چیست؟)

تنظیم و پیکربندی VH های مبتنی بر نام

تمامی تنظیمات در فایل httpd.conf صورت می گیرد. تغییر این فایل بر اساس تعیین آدرس و پورتی است که VH ها بر روی آن(ها) گوش می دهند و پاسخ داده می شود. همچنین تعریف VH ها که هر VH دارای مشخصه هایی است که تحت یک Directive تعیین می شوند.

  • پارامتر NameVirtualHost : فرض کنید می خواهید تمامی سایت ها بر روی کارت شبکه 203.54.2.5 و پورت 80 میزبانی شوند. این آدرس و پرت آن از طریق پارامتر NameVirtualHost به صورت زیر تعیین می شود.

NameVirtualHost  IP_ADDR:PORT_NUMBER

به طور مثال برای گوش دادن تمامی VH ها بر روی پورت 80 و آدرس 203.54.2.5 پارامتر به صورت زیر تنظیم خواهد شد.

NameVirtualHost 203.54.2.5:80

  • VirtualHost Directive : تمامی مشخصه های یک VM میان <VirtualHost IP_ADDR:PORT> و <VirtualHost/> تعریف می شوند. IP_ADDR:PORT که در Directive آمده است برای تعیین کردن آدرس و پورتی است که VH روی آن قابل دسترسی است. فرض کنید دو کارت شبکه دارید و می خواهید روی هر کدام چندین سایت را میزبانی کنید. پس لازم است که نخست این آدرس ها را با پارامتر NameVirtualHost تعیین کنید. بعد می توانید در خط IP_ADDR:PORT از دایرکتیو VirtualHost تعیین کنید که این VH از کدام آدرس و پورت استفاده کنید. به طور مثال 203.54.2.5:80 یعنی از میان تمامی آدرس ها، این VH بر روی آدرس و پورت فوق میزبانی می شود. یا اینکه 80:* یعنی این VH بر روی تمامی آدرس ها و پورت 80 میزبانی می شود.

مشخصه هایی که لازم است برای تعریف یک VH میان دایرکتیو VirtualHost آورده شوند موارد زیر هستند.

  • ServerAdmin : آدرس ایمل مدیر سایت (مسئول سایت) را معین می کند.
  • DocumentRoot : مسیر و دایرکتوری که محتوای وب سایت در آن قرار می گرد. به طور مثال اگر نام سایت falearn.ir باشد باید یک دایرکتوری همنام با مسیر فوق ایجاد کنیم.
  • ServerName : همنام با نام سایت و همنام با نام dns ای که در zone file درج می شود. همین نام را در مرورگر تایپ می کنیم و apache از روی HTTPD Header تشخیص می دهد که کدام سایت را درخواست کرده این.
  • ErrorLog : مشخص کننده مسیر فایلی که رویداد های سایت در آن ثبت می شود.

توجه کنید که پیش از restart کردن وب سرور Apache برای اعمال تغییرات باید دایرکتوری های مشخص شده در DocumentRoot  و ErrorLog را ایجاد کنید. فرض اینکه می خواهید برای سایتfalearn.ir  دایرکتوری را ایجاد کنید.

 mkdir -p /var/www/falearn.ir/public_html

mkdir /var/www/falearn.ir/logs

سپس با دستور زیر سرویس httpd را restart کنید.

chkconfig –level 35 httpd on

service httpd start
  و در توزیع هایی که از systemd استفاده می کنند از دستور زیر استفاده کنید.

systemctl enable httpd.service

systemctl start httpd.service

شکل زیر نشان دهنده تعریف دو Virtual Host به نام های falearn.ir و falearn.org است.

 می توایند برای آزمودن درستی انجام کار و بدون نیاز به داشتن DNS از روی همین سروری که Apache و VH را تنظیم کرده اید، از فایل etc/hosts/ استفاده کنید. به طور مثال دو VH را که تعریف کردید فایل hosts را باز کنید و سپس به ازای هر VH دو رکورد سبز رنگ زیر را درج کنید.