Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> สมาร์ทโฟน >> Linux

วิธีตั้งค่า Virtual Hosts ใน Apache บน Ubuntu

คู่มือนี้สอนสร้าง Apache Virtual Hosts เพื่อโฮสต์หลายเว็บไซต์บน Server เดียว (Single IP) บน Ubuntu

ข้อกำหนดเบื้องต้น

  • Ubuntu Server / Desktop
  • Apache2 ติดตั้งแล้ว: sudo apt install apache2
  • Domain/Subdomain ชี้มาที่ IP Server (หรือแก้ /etc/hosts สำหรับ Local)

ขั้นตอนการตั้งค่า

1. สร้าง Document Root Directories


sudo mkdir -p /var/www/site1.example.com/public_html
sudo mkdir -p /var/www/site2.example.com/public_html

# สิทธิ์
sudo chown -R $USER:$USER /var/www/site1.example.com/public_html
sudo chown -R $USER:$USER /var/www/site2.example.com/public_html
sudo chmod -R 755 /var/www

2. สร้าง Virtual Host Config Files

Site 1: /etc/apache2/sites-available/site1.example.com.conf


<VirtualHost *:80>
    ServerAdmin admin@site1.example.com
    ServerName site1.example.com
    ServerAlias www.site1.example.com
    DocumentRoot /var/www/site1.example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

Site 2: /etc/apache2/sites-available/site2.example.com.conf


<VirtualHost *:80>
    ServerAdmin admin@site2.example.com
    ServerName site2.example.com
    ServerAlias www.site2.example.com
    DocumentRoot /var/www/site2.example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

3. Enable Sites และ Reload Apache


# Enable
sudo a2ensite site1.example.com.conf
sudo a2ensite site2.example.com.conf

# Disable default site (ถ้าต้องการ)
sudo a2dissite 000-default.conf

# Reload
sudo systemctl reload apache2

4. ทดสอบ Local (แก้ /etc/hosts)


# บน Client Machine (หรือ Server เอง)
127.0.0.1   site1.example.com www.site1.example.com
127.0.0.1   site2.example.com www.site2.example.com

5. สร้างไฟล์ทดสอบ


echo "

Site 1

" | sudo tee /var/www/site1.example.com/public_html/index.html echo "

Site 2

" | sudo tee /var/www/site2.example.com/public_html/index.html

คำสั่ง Apache ที่เกี่ยวข้อง

SSL/HTTPS (Let's Encrypt)


# ติดตั้ง Certbot
sudo apt install certbot python3-certbot-apache

# ออกใบรับรอง
sudo certbot --apache -d site1.example.com -d www.site1.example.com

# Auto-renewal (Systemd Timer มาพร้อม)
systemctl status certbot.timer

Troubleshooting

  • 403 Forbidden → ตรวจสอบ Permission DocumentRoot, Require all granted ใน <Directory>
  • 404 Not Found → ตรวจสอบ DocumentRoot Path, Index file
  • Site ไม่ขึ้น → apache2ctl -S ดูว่า Virtual Host โหลดหรือไม่

Virtual Hosts เป็นฟีเจอร์หลักของ Apache ให้โฮสต์หลายไซต์บน Server เดียวได้อย่างมีประสิทธิภาพ

คำสั่งคำอธิบาย
apache2ctl configtestตรวจสอบ Syntax Config
apache2ctl -Sแสดง Virtual Hosts ที่โหลดแล้ว
systemctl status apache2สถานะ Service
tail -f /var/log/apache2/error.logดู Error Log