Skip to content
VDS · Website và máy chủ web

Apache: cài đặt và virtual host

Cài Apache trên VPS, cấu hình virtual host và module, khắc phục xung đột phổ biến với Nginx trên cổng 80.

Cập nhật 23 tháng 8, 2026

Bạn chọn Apache khi cần .htaccess, một CMS cũ hoặc hướng dẫn sẵn có từ nhà phát triển ứng dụng. Nó tốn bộ nhớ hơn Nginx, nhưng trên VDS-1 với một site nhỏ thì bạn sẽ không nhận ra.

Cài đặt

apt update && apt install -y apache2        # Debian, Ubuntu
dnf install -y httpd && systemctl enable --now httpd   # AlmaLinux, CentOS Stream

Tên dịch vụ khác nhau: apache2 trên Debian và Ubuntu, httpd trong họ RHEL. Thư mục cấu hình cũng khác — /etc/apache2 và /etc/httpd.

Kiểm tra:

systemctl status apache2
curl -I http://127.0.0.1

Virtual host

Tệp /etc/apache2/sites-available/example.ru.conf:

<VirtualHost *:80>
    ServerName example.ru
    ServerAlias www.example.ru
    DocumentRoot /var/www/example.ru

    <Directory /var/www/example.ru>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.ru-error.log
    CustomLog ${APACHE_LOG_DIR}/example.ru-access.log combined
</VirtualHost>

Bật và kiểm tra:

a2ensite example.ru
a2dissite 000-default
apachectl configtest && systemctl reload apache2

AllowOverride All chỉ cần thiết nếu bạn thực sự dùng .htaccess. Nếu không, hãy đặt None: Apache sẽ ngừng tìm các tệp này trong mọi thư mục ở mỗi yêu cầu.

Module

a2enmod rewrite headers ssl
systemctl restart apache2

Để liệt kê những gì đã bật — apache2ctl -M. Đừng bật tất cả: mỗi module đều được nạp vào mọi tiến trình worker.

Với PHP, hãy dùng PHP-FPM thay cho mod_php đã lỗi thời: PHP-FPM.

Apache và Nginx cùng nhau

Cả hai máy chủ mặc định đều lắng nghe trên cổng 80, nên cái thứ hai sẽ không khởi động được và báo Address already in use. Bạn có hai lựa chọn:

  • chỉ giữ một máy chủ;
  • đặt Nginx phía trước, chuyển Apache sang Listen 127.0.0.1:8080 và proxy tới nó — xem reverse proxy.

Để xem thứ gì đang dùng cổng:

ss -tulpn | grep :80

Lỗi thường gặp

Triệu chứngNguyên nhân
AH00558: Could not reliably determine ... server's fully qualified domain nameServerName chưa được đặt — đây là cảnh báo, nhưng dù sao bạn vẫn nên đặt nó
.htaccess không hoạt độngAllowOverride None trong khối Directory
Dịch vụ không khởi động sau khi sửaLỗi cú pháp — luôn chạy apachectl configtest trước khi reload
403 trên một thư mụcThiếu Require all granted hoặc www-data không có quyền

Log: /var/log/apache2/ (Debian, Ubuntu) hoặc /var/log/httpd/ (AlmaLinux).

Sao lưu cấu hình trước mỗi lần sửa: cp file file.bak. Trên máy ảo, khôi phục lại dễ hơn là cố nhớ bạn đã thay đổi những gì một giờ trước.