
مقدمه
وبسرور Apache یک وبسرور متنباز و محبوب است که انعطافپذیری، قدرت و پشتیبانی گستردهای برای توسعهدهندگان فراهم میکند. پیکربندی سرور Apache در یک فایل یکپارچه (Monolithic) انجام نمیشود؛ بلکه از طریق طراحی ماژولار صورت میگیرد که در آن فایلهای جدید میتوانند در صورت نیاز اضافه و تغییر کنند. درون این طراحی ماژولار، میتوانید یک سایت یا دامنه منفرد به نام Virtual Host بسازید.
با استفاده از Virtual Hostها، یک اینستنس Apache میتواند چندین وبسایت را سرو کند. هر دامنه یا سایت منفردی که با Apache پیکربندی شود، بازدیدکننده را به دایرکتوری خاصی که اطلاعات آن سایت را در خود دارد هدایت میکند. این کار بدون آنکه به بازدیدکننده نشان دهد همان سرور مسئول سایتهای دیگری هم هست، انجام میشود. این طرح تا هر جا که سرور شما بتواند بار را تحمل کند، بدون هیچ محدودیت نرمافزاری قابل گسترش است.
در این راهنما، Virtual Hostهای Apache را روی یک سرور اوبونتو راهاندازی میکنید. در طول این فرایند، با ساخت دو سایت Virtual Host یاد میگیرید که چطور بسته به دامنهای که بازدیدکنندگان درخواست میکنند، محتوای متفاوتی به آنها سرو کنید.
این آموزش روی نسخههای جدید اوبونتو اعتبارسنجی شده است: مراحل و دستورات این آموزش روی اوبونتو 22.04 LTS و 24.04 LTS بررسی شدهاند. چیدمان پیکربندی آپاچی (sites-available، sites-enabled، a2ensite و a2dissite) و ساختار دایرکتوری استفادهشده در این مقاله در این نسخهها یکسان است.
نکات کلیدی
- Virtual Hostها به یک اینستنس Apache اجازه میدهند چندین سایت را سرو کند؛ هر دامنه به ریشه مستندات (Document Root) خودش اشاره میکند.
- برای هر سایت، یک دایرکتوری زیر /var/www میسازید (مثلاً
/var/www/your_domain/public_html) و مالکیت و دسترسیها را طوری تنظیم میکنید که وبسرور بتواند فایلها را بخواند و کاربر شما بتواند آنها را ویرایش کند. - هر سایت فایل پیکربندی خود را در
/etc/apache2/sites-available/با مقادیر ServerName، ServerAlias و DocumentRoot میگیرد. - برای فعال یا غیرفعالکردن سایتها از a2ensite و a2dissite استفاده کنید؛ سپس Apache را Reload یا Restart کنید تا تغییرات اعمال شوند.
- میتوانید بدون DNS واقعی تست کنید؛ کافی است فایل Hosts محلی خود را طوری ویرایش کنید که دامنههای نمونه شما به IP سرور اشاره کنند.
پیشنیازها
قبل از شروع این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو با یک کاربر غیر root دارای دسترسی sudo. برای راهاندازی این موارد میتوانید از راهنمای «راهاندازی اولیه سرور با اوبونتو» استفاده کنید.
- Apache نصبشده روی سرور. میتوانید این کار را با تکمیل مراحل ۱ تا ۳ از آموزش «نصب وبسرور Apache روی اوبونتو» انجام دهید.
- اگر از پارمین کلود استفاده میکنید، میتوانید راهاندازی دامنهها را با دنبالکردن مستندات محصول ما — «افزودن و راهاندازی دامنهها» — یاد بگیرید.
برای تکمیل موفق این آموزش به دو دامنه با این مشخصات نیاز دارید:
- یک رکورد A که your_domain را به IP عمومی سرور شما اشاره دهد.
- یک رکورد A که www.your_domain را به IP عمومی سرور شما اشاره دهد.
برای سایر ارائهدهندگان، لطفاً به مستندات محصول مرتبط آنها مراجعه کنید.
توجه: اگر در حال حاضر دامنهای در اختیار ندارید، میتوانید از مقادیر تستی بهصورت محلی روی کامپیوتر خود استفاده کنید. مرحله ۶ این آموزش نشان میدهد که چطور مقادیر تستی خود را تست و پیکربندی کنید. این کار به شما اجازه میدهد پیکربندیتان را اعتبارسنجی کنید؛ هرچند محتوای شما از طریق نام دامنه برای بازدیدکنندگان دیگر در دسترس نخواهد بود.
مرحله ۱ — ساخت ساختار دایرکتوری
اولین قدم، ساخت ساختار دایرکتوریای است که دادههای سایتی را که به بازدیدکنندگان سرو میکنید در خود نگه میدارد.
ریشه مستندات شما — یعنی دایرکتوری سطح بالا که Apache برای یافتن محتوای قابل سرو به آن نگاه میکند — روی دایرکتوریهای منفرد زیر دایرکتوری /var/www تنظیم خواهد شد. برای هر کدام از Virtual Hostها، اینجا یک دایرکتوری میسازید.
درون هر یک از این دایرکتوریها، یک دایرکتوری public_html میسازید. دایرکتوری public_html حاوی محتوایی است که به بازدیدکنندگان شما سرو میشود. دایرکتوریهای والد — که اینجا با نامهای your_domain_1 و your_domain_2 نامگذاری شدهاند — اسکریپتها و کد اپلیکیشنِ پشتیبانِ محتوای وب را در خود نگه میدارند.
با استفاده از این دستورات و نام دامنههای خودتان، دایرکتوریهایتان را بسازید:
sudo mkdir -p /var/www/your_domain_1/public_html
sudo mkdir -p /var/www/your_domain_2/public_html
حتماً your_domain_1 و your_domain_2 را با دامنههای مربوط به خودتان جایگزین کنید. مثلاً، اگر یکی از دامنههای شما example.com باشد، این ساختار دایرکتوری را میسازید: /var/www/example.com/public_html.
مرحله ۲ — اعطای دسترسیها
شما ساختار دایرکتوری فایلهایتان را ساختید؛ اما این دایرکتوریها متعلق به کاربر root هستند. اگر میخواهید کاربر معمولی شما بتواند فایلها را در این دایرکتوریهای وب تغییر دهد، میتوانید مالکیت را با این دستورات تغییر دهید:
sudo chown -R $USER:$USER /var/www/your_domain_1/public_html
sudo chown -R $USER:$USER /var/www/your_domain_2/public_html
متغیر $USER هنگامی که ENTER را فشار میدهید، مقدار کاربری را که در حال حاضر با آن وارد شدهاید میگیرد. با انجام این کار، کاربر معمولی شما اکنون مالک زیردایرکتوریهای public_html است؛ جایی که محتوای خود را در آن ذخیره میکنید.
همچنین باید دسترسیها را تغییر دهید تا مطمئن شوید خواندنِ دایرکتوری کلی وب و همه فایلها و پوشههای داخل آن مجاز باشد تا صفحات بهدرستی سرو شوند:
sudo chmod -R 755 /var/www
وبسرور شما اکنون دسترسیهای لازم برای سرو کردن محتوا را دارد و کاربرتان هم باید بتواند در پوشههای موردنیاز محتوا بسازد. قدم بعدی، ساخت محتوا برای سایتهای Virtual Host شماست.
مرحله ۳ — ساخت صفحات پیشفرض برای هر Virtual Host
با آمادهبودن ساختار دایرکتوری، میتوانید تمرکز را روی هر سایت Virtual Host منفرد و محتوای داخل آن شروع کنید. با ساخت یک صفحه index.html برای اولین سایت شما یعنی your_domain_1 شروع کنید.
فایل index.html را با ویرایشگر متن دلخواه خود باز کنید و بسازید. این مثال از nano استفاده میکند:
nano /var/www/your_domain_1/public_html/index.html
درون این فایل، یک فایل HTML بسازید که به بازدیدکنندگان نشان دهد به کدام سایت متصل هستند:
/var/www/your_domain_1/public_html/index.html
<html>
<head>
<title>Welcome to your_domain_1!</title>
</head>
<body>
<h1>Success! The your_domain_1 virtual host is working!</h1>
</body>
</html>
برای ذخیره و بستن فایل در nano، ابتدا CTRL+X را فشار دهید. هنگام درخواستِ ذخیره فایل Y را بزنید و سپس برای خروج، در پایان ENTER را فشار دهید.
سپس، این فایل را با تایپ دستور زیر کپی کنید تا بهعنوان پایه برای سایت دوم شما استفاده شود:
cp /var/www/your_domain_1/public_html/index.html /var/www/your_domain_2/public_html/index.html
سپس این فایل جدید را باز کرده و مانند قبل، بخشهای مربوط به اطلاعات را با ویرایشگر متن خود تغییر دهید:
nano /var/www/your_domain_2/public_html/index.html
/var/www/your_domain_2/public_html/index.html
<html>
<head>
<title>Welcome to your_domain_2!</title>
</head>
<body> <h1>Success! The your_domain_2 virtual host is working!</h1>
</body>
</html>
فایل را ذخیره کرده و ببندید. اکنون برای هر سایت یک صفحه دارید که میتوانید از آن برای تست پیکربندی Virtual Host استفاده کنید.
مرحله ۴ — ساخت فایلهای جدید Virtual Host
فایلهای Virtual Host پیکربندی واقعی Virtual Hostهای شما را مشخص میکنند و کنترل میکنند که وبسرور Apache به درخواستهای دامنههای مختلف چگونه پاسخ دهد. برای اطلاعات بیشتر درباره چیدمان و گزینههای سراسری Apache، مقاله «پیکربندی وبسرور Apache در یک VPS اوبونتو یا دبیان» را ببینید.
Apache با یک فایل Virtual Host پیشفرض با نام 000-default.conf عرضه میشود. میتوانید این فایل را کپی کنید تا فایلهای Virtual Host برای هر کدام از دامنههای خود را بسازید.
فایل پیکربندی پیشفرض را برای دامنه اول کپی کنید:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/your_domain_1.conf
توجه داشته باشید که پیکربندی پیشفرض اوبونتو الزام میکند که هر فایل Virtual Host به .conf ختم شود.
فایل جدید را با دسترسی root در ویرایشگر متن دلخواه خود باز کنید:
sudo nano /etc/apache2/sites-available/your_domain_1.conf
با حذف کامنتها، فایل شبیه این خواهد بود:
/etc/apache2/sites-available/your_domain_1.conf
<VirtualHost *:80>
...
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
درون این فایل، موارد مربوط به دامنه اول خود را سفارشی کرده و چند Directive اضافه کنید. این بخشِ Virtual Host با هر درخواستی که روی پورت 80 (پورت پیشفرض HTTP) انجام شود مطابقت دارد.
ابتدا، Directive مربوط به ServerAdmin را به ایمیلی تغییر دهید که مدیر سایت بتواند از طریق آن ایمیل دریافت کند:
/etc/apache2/sites-available/your_domain_1.conf
ServerAdmin admin@your_domain_1
بعد از این، دو Directive اضافه کنید. اولی که ServerName نام دارد، دامنه پایه را برای تعریف Virtual Host تعیین میکند. دومی که ServerAlias نام دارد، نامهای دیگری را تعریف میکند که باید مثل نام پایه مطابقت داده شوند. این برای مطابقت با هاستهای اضافی که تعریف کردهاید مفید است. مثلاً، اگر Directive مربوط به ServerName را روی example.com تنظیم کنید، میتوانید یک ServerAlias برای www.example.com تعریف کنید و هر دو به IP این سرور اشاره خواهند کرد.
این دو Directive را بعد از خط ServerAdmin به فایل پیکربندی خود اضافه کنید:
/etc/apache2/sites-available/your_domain_1.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_1
ServerName your_domain_1
ServerAlias www.your_domain_1
DocumentRoot /var/www/html
...
</VirtualHost>
سپس، مسیر فایل Virtual Host خود را برای ریشه مستندات این دامنه تغییر دهید. Directive مربوط به DocumentRoot را طوری ویرایش کنید که به دایرکتوریای که برای این هاست ساختید اشاره کند:
/etc/apache2/sites-available/your_domain_1.conf
DocumentRoot /var/www/your_domain_1/public_html
اینجا نمونهای از فایل Virtual Host با همه تغییرات بالا آمده است:
/etc/apache2/sites-available/your_domain_1.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_1
ServerName your_domain_1
ServerAlias www.your_domain_1
DocumentRoot /var/www/your_domain_1/public_html
...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
فایل را ذخیره کرده و ببندید.
فایل پیکربندی دوم خود را با کپیکردن فایل از سایت Virtual Host اول بسازید:
sudo cp /etc/apache2/sites-available/your_domain_1.conf /etc/apache2/sites-available/your_domain_2.conf
فایل جدید را در ویرایشگر دلخواه خود باز کنید:
sudo nano /etc/apache2/sites-available/your_domain_2.conf
اکنون باید همه بخشهای اطلاعاتی را تغییر دهید تا به دامنه دوم شما ارجاع بدهند. وقتی کارتان تمام شد، باید به این شکل باشد:
/etc/apache2/sites-available/your_domain_2.conf
<VirtualHost *:80>
...
ServerAdmin admin@your_domain_2
ServerName your_domain_2
ServerAlias www.your_domain_2
DocumentRoot /var/www/your_domain_2/public_html
...
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
وقتی کارتان تمام شد، فایل را ذخیره کرده و ببندید.
مرحله ۵ — فعالسازی فایلهای جدید Virtual Host
حالا که فایلهای Virtual Host خود را ساختید، باید آنها را فعال کنید. Apache چند ابزار برای این کار در بر دارد.
از ابزار a2ensite برای فعالسازی هر کدام از سایتهای خود استفاده خواهید کرد. اگر میخواهید درباره این اسکریپت بیشتر بخوانید، میتوانید به صفحه man مربوط به a2ensite مراجعه کنید.
برای فعالسازی سایتهای Virtual Host خود، از دستورات زیر استفاده کنید:
sudo a2ensite your_domain_1.conf
sudo a2ensite your_domain_2.conf
برای هر دو سایت، خروجیای مشابه مثال زیر وجود خواهد داشت که به شما یادآوری میکند سرور Apache خود را Reload کنید:
خروجی:
Enabling site example.com.
To activate the new configuration, you need to run:
systemctl reload apache2
قبل از Reload کردن سرور، سایت پیشفرض تعریفشده در 000-default.conf را با استفاده از دستور a2dissite غیرفعال کنید:
sudo a2dissite 000-default.conf
خروجی:
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
سپس، خطاهای پیکربندی را تست کنید:
sudo apache2ctl configtest
باید این خروجی را دریافت کنید:
خروجی:
. . .
Syntax OK
وقتی کارتان تمام شد، Apache را ریاستارت کنید تا این تغییرات اعمال شوند.
sudo systemctl restart apache2
بهصورت اختیاری، میتوانید بعد از همه این تغییرات، وضعیت سرور را با این دستور بررسی کنید:
sudo systemctl status apache2
سرور شما اکنون باید برای سرو کردن دو وبسایت راهاندازی شده باشد. اگر از نامهای دامنه واقعی استفاده میکنید، میتوانید مرحله ۶ را رد کرده و به مرحله ۷ بروید. اگر پیکربندی خود را بهصورت محلی تست میکنید، مرحله ۶ را دنبال کنید تا یاد بگیرید چطور راهاندازی خود را با کامپیوتر محلیتان تست کنید.
مرحله ۶ — (اختیاری) راهاندازی فایل Hosts محلی
اگر برای تست این روش از نامهای دامنه واقعیِ متعلق به خودتان استفاده نکردهاید و بهجای آن از دامنههای نمونه استفاده کردهاید، همچنان میتوانید کارکرد سایتهای Virtual Host خود را با تغییر موقت فایل hosts روی کامپیوتر محلی خود تست کنید. این کار هر درخواستی برای دامنههایی که پیکربندی کردهاید را رهگیری کرده و آنها را به سرور خصوصی مجازی (VPS) شما هدایت میکند؛ درست همانطور که سیستم DNS در صورت استفاده از دامنههای ثبتشده انجام میداد. این کار فقط از کامپیوتر محلی شما کار میکند و فقط برای اهداف تست است.
مطمئن شوید که این مراحل را روی کامپیوتر محلی خود انجام میدهید، نه سرور VPS. باید رمز عبور مدیریتی کامپیوتر را بدانید یا بهنحوی عضو گروه مدیریتی باشید.
اگر روی کامپیوتر Mac یا لینوکس هستید، فایل محلی خود را با دسترسی مدیریتی با تایپ این دستور ویرایش کنید:
sudo nano /etc/hosts
اگر روی ماشین ویندوز هستید، Command Prompt را باز کرده و تایپ کنید:
notepad %windir%\system32\drivers\etc\hosts
جزئیاتی که باید اضافه کنید عبارتاند از IP عمومی سرور شما و سپس دامنهای که میخواهید برای رسیدن به آن سرور استفاده کنید. با استفاده از دامنههای این راهنما و جایگزینی IP سرور خود بهجای عبارت your_server_IP، فایل شما باید به این شکل باشد:
/etc/hosts
127.0.0.1 localhost
127.0.1.1 guest-desktop
your_server_IP your_domain_1
your_server_IP your_domain_2
این کار هر درخواستی برای دو دامنه شما روی کامپیوترتان را هدایت کرده و به سرور شما در IP مشخصشده میفرستد.
فایل را ذخیره کرده و ببندید.
مرحله ۷ — تست نتایج
حالا که Virtual Hostهای خود را پیکربندی کردهاید، میتوانید راهاندازی خود را با مراجعه به دامنههایی که در مرورگر وب پیکربندی کردهاید تست کنید:
http://your_domain_1
[تصویر: نمونه صفحه وب Virtual Host اول با محتوای ویرایششده]
همچنین میتوانید صفحه هاست دوم را مشاهده کرده و فایلی را که برای سایت دوم ساختید ببینید:
http://your_domain_2
[تصویر: نمونه صفحه وب Virtual Host دوم با محتوای ویرایششده]
اگر هر دو سایت طبق انتظار کار کنند، شما با موفقیت دو Virtual Host را روی یک سرور پیکربندی کردهاید.
توجه: اگر فایل hosts کامپیوتر محلی خود را تنظیم کردید — مثل مرحله ۶ این آموزش — ممکن است بخواهید خطوطی را که اضافه کردهاید، حالا که کارکرد پیکربندیتان را تأیید کردهاید، حذف کنید. این کار جلوگیری میکند فایل hosts شما با ورودیهایی که دیگر لازم نیستند پر شود.
سوالات متداول
۱. Virtual Hostهای Apache چیست؟
Virtual Hostهای Apache راهی برای اجرای بیش از یک وبسایت روی یک سرور Apache واحد هستند. هر Virtual Host دامنه (یا زیردامنه)، ریشه مستندات و تنظیمات خود را دارد. بازدیدکنندگان فقط سایتی را میبینند که دامنهاش را درخواست کردهاند؛ نمیبینند که سایتهای دیگری هم روی همان سرور وجود دارند.
۲. Apache چند Virtual Host را میتواند هندل کند؟
Apache تعداد Virtual Hostها را محدود نمیکند. به هر تعدادی که سرور شما منابع دارد میتوانید اضافه کنید. هر سایت جدید به فایل پیکربندی خود در /etc/apache2/sites-available/، دایرکتوری خود زیر /var/www نیاز دارد؛ سپس آن را با a2ensite فعال کرده و Apache را Reload میکنید.
۳. تفاوت ServerName و ServerAlias چیست؟
Directiveهای ServerName و ServerAlias مشخص میکنند Apache به کدام نامهای میزبان برای هر Virtual Host پاسخ دهد؛ اما هدفهای کمی متفاوتی دارند:
| Directive | توضیح | مثال |
|---|---|---|
| ServerName | نام میزبان اصلی و متعارف (Canonical) برای Virtual Host. Apache این نام را دقیقاً مطابقت میدهد. | example.com |
| ServerAlias | نامهای میزبان جایگزین که به این Virtual Host اشاره میکنند؛ شامل Wildcardها هم میشوند. | www.example.com، *.example.com |
چطور کار میکند؟
- از ServerName برای دامنه اصلی استفاده کنید.
- از ServerAlias برای سایر نامهای میزبان (مثل نسخههای www. یا زیردامنهها) که باید همان محتوای سایت را نمایش دهند استفاده کنید.
هر درخواستی که با ServerName یا هر کدام از ورودیهای ServerAlias مطابقت کند، توسط همان Virtual Host سرو میشود. برای اطلاعات بیشتر، مستندات رسمی Apache درباره Virtual Hostها را ببینید.
۴. آیا برای Virtual Hostها به نام دامنه نیاز دارم؟
برای دنبالکردن این راهنما به دامنه ثبتشده نیاز ندارید. میتوانید از نامهای میزبان نمونه استفاده کرده و آنها را با ویرایش فایل hosts روی کامپیوتر خود به سرورتان اشاره دهید (مرحله ۶ را ببینید). برای سایتی که دیگران روی اینترنت به آن دسترسی پیدا میکنند، به دامنه واقعی و رکوردهای DNSای که آن را به سرور شما اشاره میکنند نیاز دارید. اگر از پارمین کلود استفاده میکنید، میتوانید دامنهها را در پنل مدیریت اضافه و مدیریت کنید؛ برای نحوه افزودن یک دامنه، راهنمای سریع DNS ما را ببینید.
۵. فایلهای Virtual Host آپاچی کجا ذخیره میشوند؟
روی اوبونتو و دبیان، پیکربندیهای Virtual Host در /etc/apache2/sites-available/ قرار دارند. هر سایت آنجا یک فایل .conf دارد (مثلاً example.com.conf). فعالکردن یک سایت با a2ensite، یک لینک نمادین (Symlink) در /etc/apache2/sites-enabled/ میسازد که به آن فایل اشاره میکند. سایت پیشفرضی که وقتی هیچ هاست دیگری مطابقت نداشته باشد پاسخ میدهد، 000-default.conf است.
جمعبندی
اکنون یک سرور منفرد دارید که دو نام دامنه جداگانه را مدیریت میکند. میتوانید این فرایند را با دنبالکردن مراحلی که در بالا توضیح دادیم، برای افزودن Virtual Hostهای اضافی گسترش دهید. هیچ محدودیت نرمافزاری روی تعداد نامهای دامنهای که Apache میتواند مدیریت کند وجود ندارد؛ پس بهدلخواه و به هر تعدادی که سرور شما توانایی هندل کردن را دارد، Virtual Host بسازید.




