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:8080và 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ứng | Nguyên nhân |
|---|---|
AH00558: Could not reliably determine ... server's fully qualified domain name | ServerName 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 động | AllowOverride None trong khối Directory |
| Dịch vụ không khởi động sau khi sửa | Lỗi cú pháp — luôn chạy apachectl configtest trước khi reload |
| 403 trên một thư mục | Thiế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.