Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Cách thiết lập Virtual Hosts trong Apache trên Ubuntu

Hướng dẫn cấu hình Virtual Hosts (vhost) Apache – chạy nhiều website/domain trên 1 IP, 1 server. Dùng cho shared hosting hoặc môi trường dev local.

Mục tiêu

Tạo 2 virtual host trên local: calvin.dev và hobbes.dev, trỏ tới thư mục riêng biệt.

Bước 1: Cài Apache

# sudo apt update
# sudo apt install apache2

Kiểm tra: https://localhost → trang mặc định Apache.

Bước 2: Tạo cấu hình Virtual Host

Tạo file /etc/apache2/sites-available/vhosts.conf:


    ServerName calvin.dev
    ServerAlias www.calvin.dev
    DocumentRoot /var/www/calvin.dev
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    
    ErrorLog ${APACHE_LOG_DIR}/calvin.dev_error.log
    CustomLog ${APACHE_LOG_DIR}/calvin.dev_access.log combined



    ServerName hobbes.dev
    ServerAlias www.hobbes.dev
    DocumentRoot /var/www/hobbes.dev
    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    
    ErrorLog ${APACHE_LOG_DIR}/hobbes.dev_error.log
    CustomLog ${APACHE_LOG_DIR}/hobbes.dev_access.log combined
  • AllowOverride All: Cho phép .htaccess (cần cho WordPress, Laravel...).
  • Require all granted: Apache 2.4+ (cũ: Order allow,deny / Allow from all).
  • Log riêng cho mỗi site – dễ debug.

Bước 3: Tạo thư mục gốc (DocumentRoot)

# sudo mkdir -p /var/www/calvin.dev /var/www/hobbes.dev
# sudo chown -R www-data:www-data /var/www/calvin.dev /var/www/hobbes.dev
# sudo chmod -R 755 /var/www/calvin.dev /var/www/hobbes.dev

Bước 4: Cập nhật /etc/hosts (Chỉ cho local dev)

127.0.0.1   calvin.dev www.calvin.dev
127.0.0.1   hobbes.dev www.hobbes.dev

Trên production: Cấu hình DNS A record trỏ về IP server.

Bước 5: Kích hoạt site và reload Apache

# sudo a2ensite vhosts.conf
# sudo systemctl reload apache2
  • a2ensite: Tạo symlink sites-available → sites-enabled.
  • a2dissite: Vô hiệu hóa site.

Bước 6: Tạo file test

# echo "Hi I'm Calvin" | sudo tee /var/www/calvin.dev/index.html
# echo "Hi I'm Hobbes" | sudo tee /var/www/hobbes.dev/index.html

Bước 7: Test

  • https://calvin.dev → "Hi I'm Calvin"
  • https://hobbes.dev → "Hi I'm Hobbes"

Mở rộng: Virtual Host HTTPS (SSL/TLS)


    ServerName calvin.dev
    DocumentRoot /var/www/calvin.dev
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/calvin.dev.crt
    SSLCertificateKeyFile /etc/ssl/private/calvin.dev.key
    # ... config SSL hiện đại (Mozilla SSL Generator)

Dùng Let's Encrypt (Certbot) tự động cấp/renew cert miễn phí:

# sudo apt install certbot python3-certbot-apache
# sudo certbot --apache -d calvin.dev -d www.calvin.dev

Khắc phục sự cố thường gặp

  • 403 Forbidden: Kiểm tra Require all granted, quyền thư mục (www-data), SELinux/AppArmor.
  • 500 Internal Server: Xem ErrorLog của vhost.
  • Không load được: sudo apache2ctl configtest kiểm tra cú pháp.
  • Port 80 bị chiếm: ss -tlnp | grep :80.