# 🌐 Apache Virtual Hosting در لینوکس
## ✳️ Virtual Hosting چیست؟
Virtual Hosting به شما اجازه میدهد چند سایت را روی یک سرور Apache میزبانی کنید. اینکار از طریق تنظیمات خاصی در فایلهای پیکربندی Apache انجام میشود.
---
## 📁 محل فایلهای پیکربندی Apache
بسته به توزیع لینوکس:
* Ubuntu/Debian:
* فایل اصلی: `/etc/apache2/apache2.conf`
* سایتها: `/etc/apache2/sites-available/`
* RHEL/CentOS:
* فایل اصلی: `/etc/httpd/conf/httpd.conf`
* دایرکتوریهای مجازی معمولاً در فایل اصلی تعریف میشوند.
---
## ✅ پیشنیازها
1. نصب Apache:
```bash
sudo apt install apache2 # برای Debian/Ubuntu
sudo yum install httpd # برای CentOS/RHEL
```
2. تنظیم hostname صحیح:
```bash
hostnamectl set-hostname myserver
```
---
## 🟢 Name-Based Virtual Hosting
مناسب برای زمانی که چند **نام دامنه** دارید ولی فقط **یک آدرس IP**.
### 🎯 مثال:
دامنهها:
* `site1.local`
* `site2.local`
### 🛠️ مراحل:
#### 1. ایجاد دایرکتوری برای سایتها:
```bash
sudo mkdir -p /var/www/site1.local/public_html
sudo mkdir -p /var/www/site2.local/public_html
```
#### 2. ایجاد فایل index:
```bash
echo "<h1>Site 1</h1>" | sudo tee /var/www/site1.local/public_html/index.html
echo "<h1>Site 2</h1>" | sudo tee /var/www/site2.local/public_html/index.html
```
#### 3. ایجاد Virtual Host Files (در Debian/Ubuntu):
```bash
sudo nano /etc/apache2/sites-available/site1.local.conf
```
```apache
<VirtualHost *:80>
ServerAdmin admin@site1.local
ServerName site1.local
DocumentRoot /var/www/site1.local/public_html
</VirtualHost>
```
همین کار را برای `site2.local` تکرار کنید.
#### 4. فعالسازی سایتها:
```bash
sudo a2ensite site1.local.conf
sudo a2ensite site2.local.conf
sudo systemctl reload apache2
```
#### 5. افزودن به `/etc/hosts`:
```bash
sudo nano /etc/hosts
```
اضافه کنید:
```
127.0.0.1 site1.local
127.0.0.1 site2.local
```
---
## 🔵 IP-Based Virtual Hosting
در این روش، هر سایت به یک **آدرس IP جداگانه** اختصاص داده میشود.
### ⚙️ فرض:
* IP اول: `192.168.1.10`
* IP دوم: `192.168.1.11`
### 🛠️ VirtualHost:
```apache
<VirtualHost 192.168.1.10:80>
ServerName site1.local
DocumentRoot /var/www/site1.local/public_html
</VirtualHost>
<VirtualHost 192.168.1.11:80>
ServerName site2.local
DocumentRoot /var/www/site2.local/public_html
</VirtualHost>
```
اطمینان حاصل کنید که هر دو IP به سرور اختصاص داده شدهاند و در دسترس هستند.
---
## ✅ بررسی صحت تنظیمات
```bash
sudo apachectl configtest
```
اگر پیغام `Syntax OK` گرفتید:
```bash
sudo systemctl reload apache2 # یا httpd
```
---
## 🧪 تست
در مرورگر باز کنید:
```
http://site1.local
http://site2.local
```
---
## 🛡️ نکات امنیتی و حرفهای
* از گواهینامه SSL برای هر Virtual Host استفاده کنید (با Let's Encrypt)
* دایرکتوریها را با `AllowOverride` یا `DirectoryIndex` کنترل کنید
* سطح دسترسی فایلها را محدود نگه دارید
---
## 📌 نتیجهگیری
Virtual Hosting در Apache ابزاری قدرتمند برای میزبانی چند سایت در یک سرور است. Name-based برای اکثر موارد کافی است، ولی در برخی سناریوهای پیشرفته، IP-based مفید است.